当我在gradle中定义时,可以在java / test下模拟最终类:
testCompile" org.mockito:mockito-inline:+"
如何在java / androidTest下模拟final类?此解决方案不起作用:
androidTestCompile" org.mockito:mockito-android:+"
你有什么想法吗?
答案 0 :(得分:7)
根据this GitHub issue,mockito-android
不支持模拟最终课程。
来自其中一位图书馆维护者:
由于缺少我们正在运行的检测API,因此目前没有可能让[模拟最终类]在Android中工作。 Android VM不是标准VM,只实现Java规范的子集。只要Google不选择扩展其JVM,我担心此功能将无效。
根据您的使用情况,有一些选项可以替换它。
选项1:使用包装
如果你想模拟像final
这样的BluetoothDevice
Android系统类,你可以简单地围绕该类创建一个非最终包装,并在代码中使用BluetoothDeviceWrapper
而不是{ {1}}:
BluetoothDevice
专业提示:您可以使用Android Studio的class BluetoothDeviceWrapper {
private final BluetoothDevice bluetoothDevice;
BluetoothDeviceWrapper(BluetoothDevice bluetoothDevice) {
this.bluetoothDevice = bluetoothDevice;
}
public String getName() {
return bluetoothDevice.getName();
}
}
方法为您生成委托方法,例如Generate / Delegate
,方法是按 Alt-Ins 或 Cmd-N 并选择正确的选项。有关更详细的示例,请参阅this answer。
选项2:使用Robolectric等测试框架
Robolectric提供了类getName()
和Context
等Android类的工作测试双打(称为阴影)。您可以在开箱即用的测试中找到您想要模拟的类的阴影。
选项3:使用DexOpener
您还可以尝试使用库DexOpener来模拟Android中的最终类。
答案 1 :(得分:1)
您现在可以使用dexmaker-mockito-inline
。有关Mockito的变体及其功能的详细信息,请参见here。
答案 2 :(得分:0)
我得到的回复是最终的模拟制作者无法在Android上运行。
https://github.com/mockito/mockito/issues/1173#issuecomment-324401986
答案 3 :(得分:0)
最后的类,对象,构造函数都可以用嘲笑来模仿 https://mockk.io/