【发布时间】:2015-03-28 08:10:32
【问题描述】:
我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,所以它看起来像模拟最终类。现在我尝试构建项目,确保这个测试有效。 它如何使用核心模拟在这里制作模拟最终课程? 如果它的代码最终不起作用,你知道如何模拟最终类以进行 android 仪器测试吗? (我已经是try PowerMock)。谢谢
【问题讨论】:
-
我无法准确理解您的要求;但我可以向你保证,核心 Mockito 不能模拟最终类,而 PowerMock 可以与 Mockito 一起模拟最终类。
-
Android JVM 不是 Java 的;也许那里的规则不同。 Mockito 常见问题解答不包括 Android 的 JVM。
-
嗯,Mockito 通过创建一个用于模拟的子类来工作。如果一个类能够被子类化,则意味着 JVM 不遵守
final声明。如果 Android JVM 出现这种故障,我真的会感到惊讶。我唯一的想法是,本示例中使用的RoboelectricTestRunner可能会使用一些反射魔法来删除 PowerMock 所做的final。
标签: java android mocking mockito android-instrumentation