【问题标题】:Android BluetoothAdapter MockingAndroid 蓝牙适配器模拟
【发布时间】:2014-12-31 03:46:17
【问题描述】:

我正在尝试模拟测试蓝牙应用程序,但我创建 BluetoothAdapter 类的模拟对象的第一步不起作用!!

我正在使用带有简单模拟的 powermockito。

 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)

有人使用过任何模拟框架来模拟蓝牙应用程序吗?任何建议都会很有帮助

【问题讨论】:

    标签: android unit-testing mockito android-bluetooth


    【解决方案1】:

    Android 框架中的BluetoothAdapter 被声明为final,所以在你问这个问题的时候,它不能被模拟,无论是使用 Mockito 还是使用 Robolectric。

    不过,Android 单元测试从那时起发生了很大变化。使用最新版本的工具,当您构建单元测试时,这些工具会生成一个已修补的android.jar,并删除所有finals。这使得所有 Android 类都可用于模拟。现在,如果你想模拟任何蓝牙代码,你可以用标准的方式来做。如果您更新到最新工具,您已经尝试过的代码将“正常工作”。或者,Robolectric 现在内置了一个 ShadowBluetoothAdapter 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多