gpt4 book ai didi

android - 在android 4.3中使用Robolectric测试BluetoothAdapter

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:53 24 4
gpt4 key购买 nike

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

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

我想使用 Robolectric 进行单元测试。我正在使用 Robolectric 2.2。但是我发现bm是null,不知道怎么mock它。

最佳答案

挑战

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

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

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

PowerMock 解决方案

PowerMock然而应该能够处理这些final classes .摘要(点击链接了解更多详情)

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

关于android - 在android 4.3中使用Robolectric测试BluetoothAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com