我find in 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 FAQ:
Mockito有什么限制
- 需要java 1.5 +
- 无法模拟最终课程
- ...
我从标准的android-sdk检查它是BluetoothGatt,所以它看起来像模拟最终类。现在我尝试构建项目,肯定这个测试工作。 如何用核心mockito在这里制作模拟决赛课? 如果它的代码最终不起作用,你知道如何模拟最终类的android检测吗? (我已经try PowerMock)。感谢
答案 0 :(得分:2)
Robolectric旨在创建和替换Android标准类的实现,包括最终的类和方法。在引擎盖下,它以与PowerMockito非常相似的方式工作,使用自己的类加载器来建立一个有利于自己的模拟的类路径。
Robolectric中的Android类的模拟实现称为 shadows ,并且库不完整;您可能希望create a custom shadow符合您的需求。
使用Mockito进行方法调用仍然可能不容易,但是您可以使用Robolectric方法来获取阴影的实例,并编写将方法参数保存到实例中的阴影实现(等等)。