3

在 github 示例中找到了如何使用标准 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,所以它看起来像模拟最终类。现在我尝试构建项目,确保这个测试有效。它如何使用核心模拟在这里制作模拟最终课程?如果它的代码最终无法正常工作,您知道如何模拟最终类以进行 android 仪器测试吗?(我已经尝试过 PowerMock)。谢谢

4

1 回答 1

2

Robolectric旨在创建和替换 Android 标准类的实现,包括最终类和方法。在幕后,它的工作方式与 PowerMockito 非常相似,使用自己的类加载器来建立有利于自己的模拟的类路径。

Robolectric 中 Android 类的 Mock 实现称为shadows,库不完整;您可能想要创建一个适合您需要的自定义阴影。

使用 Mockito 进行方法调用可能仍然不容易,但您可以使用 Robolectric 方法获取阴影的实例,并编写将方法参数保存到实例中的阴影实现(等等)。

于 2015-03-30T16:05:06.210 回答