使用Robolectric在android 4.3中测试BluetoothAdapter

时间:2014-05-26 01:25:56

标签: android robolectric

在我的Android应用程序中,有以下代码:

BluetoothManager bm = (BluetoothManager)activity.getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter ba = bm.getAdapter();

我想使用Robolectric进行单元测试。我正在使用Robolectric 2.2。 但是我发现bm是空的,我不知道如何嘲笑它。

1 个答案:

答案 0 :(得分:1)

挑战

测试蓝牙和其他系统服务的挑战是这些类都是最终的

困难的方法(如果你愿意,可以跳过并转到powermock解决方案)

因此,如果您想要注入其他任何东西,您需要围绕最终类创建一个包装器,然后提供实现转发到实际的蓝牙类和另一个模拟您的东西的实现。但是然后需要更新所有编码以直接使用该包装而不是最终类。

PowerMock解决方案

PowerMock但是应该能够处理这些final classes。摘要(更多细节请点击链接)

  • 在测试用例的类级别使用@RunWith(PowerMockRunner.class)注释。
  • 在测试用例的类级别使用@PrepareForTest(ClassWithFinal.class)注释。
  • 使用PowerMock.createMock(ClassWithFinal.class)为此类的所有方法创建一个模拟对象(让我们将其称为mockObject)。
  • 使用PowerMock.replay(mockObject)将模拟对象更改为重播模式。
  • 使用PowerMock.verify(mockObject)将模拟对象更改为验证模式。