使用 Mock RxAndroidBle 模拟 BLECharacteristic Write

Mocking BLE Characteristic Write with MockRxAndroidBle

我正在编写 JUnit 测试,使用 MockRxAndroidBle 将数据写入 BLE 特性。正在使用 DeviceBuilder 上的 addService(UUID, List<BluetoothGattCharacteristic>) 方法将特征添加到模拟设备。特征本身是使用 CharacteristicBuilder 创建的。当测试为 运行 时,它失败并显示消息 java.lang.RuntimeException: Method setValue in android.bluetooth.BluetoothGattCharacteristic not mocked. See http://g.co/androidstudio/not-mocked for details."

引用的link表示单元测试中应使用默认值。

testOptions { unitTests.returnDefaultValues = true }

启用允许测试在特征设置中通过,但在尝试写入特征时失败。此时的例外是BleCharacteristicNotFoundException。仔细检查后,似乎 RxBleDeviceServices returns 中的 BluetoothGattService 实例在通过 UUID 检索特征时为 null。调试器还显示该服务没有任何特征并且列表为空。我相信 null 是这个内部列表的默认值。

有没有一种方法可以创建模拟写入特征的 JUnit 测试?

您需要 运行 使用 Roboelectric 进行测试。所以将其添加到您的单元测试 class 定义

@RunWith(RobolectricTestRunner.class)