我在github示例中发现了如何使用standart Mockito创建最终类(BluetoothGatt.class)的实例:
...
@RunWith(RobolectricTestRunner.class)
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class OnBoardingServiceTest {
private BluetoothGattCharacteristic characteristic;
private OnBoardingService service;
private BluetoothGattReceiver receiver = new BluetoothGattReceiver();
@Before public void initialise() {
BleDevice bleDevice = mock(BleDevice.class);
when(bleDevice.getType()).thenReturn(BleDeviceType.WunderbarMIC);
BluetoothGatt gatt = mock(BluetoothGatt.class);
...
但来自Mockito常见问题解答:
Mockito 的局限性是什么
- 需要java 1.5+
- 无法模拟最终类
我检查了一下它是标准android sdk中的BluetoothGatt,所以它看起来像mock最终类。现在我尝试构建项目,确保这个测试工作正常。它如何在这里用核心mockito制作mock-final类?如果它的代码最终不起作用,你知道如何为android仪器测试制作最终类的mock吗?(我已经在尝试PowerMock了)。感谢
Robolectric旨在创建和替换Android标准类的实现,包括最终类和方法。在后台,它的工作方式与PowerMockito非常相似,使用自己的类加载器来建立有利于自己的mock的类路径。
Robolectric中Android类的Mock实现被称为shadows,并且库是不完整的;您可能想要创建一个适合您需要的自定义阴影。
使用Mockito进行方法调用可能仍然不容易,但您可以使用Robolectric方法来获取阴影的实例,并编写将方法参数保存到实例中的阴影实现(等等)。