我想通过Mockito测试我的Android项目。Mockito间谍不工作
但似乎间谍并不按我的想法工作。 间谍对象是不是等于一个真实的对象?
当我尝试调用间谍对象的方法时,测试结果一直是AbstractMethodError(如下)。
java.lang.AbstractMethodError: abstract method not implemented
at com.google.dexmaker.mockito.InvocationHandlerAdapter$ProxiedMethod.isAbstract(InvocationHandlerAdapter.java)
at org.mockito.internal.invocation.InvocationImpl.callRealMethod(InvocationImpl.java:109)
at org.mockito.internal.stubbing.answers.CallsRealMethods.answer(CallsRealMethods.java:41)
at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:93)
at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:38)
at com.google.dexmaker.mockito.InvocationHandlerAdapter.invoke(InvocationHandlerAdapter.java:49)
at ArrayList_Proxy.add(ArrayList_Proxy.generated)
我的测试用例:
public void testGetAllCountryKeywords_WithSpy(){
List<String> list = new ArrayList<>();
List spy = spy(list);
spy.add("hi");
}
这里是我的build.gradle的依赖关系。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile 'junit:junit:4.12'
androidTestCompile "com.google.dexmaker:dexmaker:1.+"
androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.+"
androidTestCompile 'org.mockito:mockito-core:1.10.+'
androidTestCompile 'com.android.support.test:runner:0.3'
}
有人可以给我一些建议吗?我真的不知道。谢谢!
可能1.10的Mockito以及dexmaker 1.2之间的一个错误。你可以尝试强制mockito 1.9.5,看看是否修复它? https://code.google.com/p/dexmaker/issues/detail?id=43 –
同样的问题在这里。我正在使用2.0.7-beta。使用版本1.9.5对其进行排序。 – Darren
@SkinnyJ将版本更改为1.9.5后,间谍工作!谢谢! –