安卓蓝牙适配器模拟

8

我正在尝试模拟测试蓝牙应用程序,但是我创建BluetoothAdapter类的模拟对象的第一步却失败了!

我正在使用powermockito和easy mock。

 mBluetoothAdapter = (BluetoothAdapter)PowerMock.createMock(BluetoothAdapter.class);

这个失败了。以下是堆栈跟踪:

java.lang.IllegalArgumentException: No visible constructors in class android.bluetooth.BluetoothAdapter
at org.easymock.internal.DefaultClassInstantiator.getConstructorToUse(DefaultClassInstantiator.java:94)
at org.easymock.internal.AndroidClassProxyFactory.createProxy(AndroidClassProxyFactory.java:48)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:114)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:88)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:79)
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212)
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163)
at org.powermock.api.easymock.PowerMock.createMock(PowerMock.java:89)
at com.xxx.blesimplesample.test.MainActivityTest.setUp(MainActivityTest.java:59)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1710)

有人用过蓝牙应用程序模拟框架吗? 有任何建议将非常有帮助。

1个回答

2
在Android框架中,BluetoothAdapter被声明为final,因此在您提出这个问题的时候,它不能被Mockito或Robolectric模拟。然而,自那时以来,Android单元测试发生了很大变化。使用最新版本的工具构建单元测试时,工具会生成一个打了补丁的android.jar,其中所有的final都被删除。这使得所有的Android类都可以用于模拟。现在,如果您想要模拟任何蓝牙代码,可以按照标准方式进行。如果您更新到最新的工具,那么您已经尝试过的代码将“正常工作”。另外,Robolectric现在内置了ShadowBluetoothAdapter类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接