使用Mockito-core创建最终类的模拟?

时间:2015-03-28 08:10:32

标签: java android mocking mockito android-instrumentation

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)。感谢

1 个答案:

答案 0 :(得分:2)

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

Robolectric中的Android类的模拟实现称为 shadows ,并且库不完整;您可能希望create a custom shadow符合您的需求。

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