使用Mockito核心创建最终类的mock



我在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方法来获取阴影的实例,并编写将方法参数保存到实例中的阴影实现(等等)。

最新更新