当我运行以下代码时:
public class ActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
....
public void testCanCreateMockito() {
List mockedList = Mockito.mock(List.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下例外情况:
java.lang.ExceptionInInitializerError
at org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass(ClassImposterizer.java:95)
at org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:57)
at org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:49)
at org.mockito.internal.creation.cglib.CglibMockMaker.createMock(CglibMockMaker.java:24)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
at org.mockito.Mockito.mock(Mockito.java:1285)
at org.mockito.Mockito.mock(Mockito.java:1163)
at com.acesounderglass.hungertracker.ActivityTest.testCanCreateMockito(ActivityTest.java:60)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
Caused by: org.mockito.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:238)
at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105)
at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70)
... 23 more
Caused by: java.lang.reflect.InvocationTargetException
at org.mockito.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:385)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:220)
... 28 …Run Code Online (Sandbox Code Playgroud) 所以我有一个Database类,它有一个扩展SQLOpenHelper的依赖项,我正在测试使用Android检测测试和Mockito来模拟依赖项.我们注意到Mockito实际上并没有Mockito.mock(class)在实际代码运行时嘲笑实现,并且正如我们所期望的那样抛出空指针异常.在API 19设备上,测试按预期运行,并且模拟正常工作.
有没有人有任何建议或事情要尝试?我尝试过具有类似结果的真实设备和模拟器.这可能是一个Mockito问题,还是一个dex-maker问题?我在搜索时没有找到任何信息.
经过一些更多的测试,我用Mockito模拟的任何类实际上只是使用了实现.这是我的依赖项
androidTestCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
Run Code Online (Sandbox Code Playgroud)
注意:如果这有任何区别,这也在库模块中.
我正在尝试使用JUnit和Mockito为Android 编写单元测试(未检测).
一些上下文:我正在测试一个严重依赖于视图的类,我不能/不想在测试期间实际膨胀视图.有一次,我的类到测试想要使用视图的宽度,我已经定义了一个(公共)方法,该类用于获取运行时的宽度(getWidth()).
在我的测试中,我想使用Mockito来模拟getWidth()方法 - 仅.(虽然让其他人的行为方式相同).只是为了澄清:我的类调用中的一种方法,我getWidth()希望它在测试期间返回一个模拟值.
所以我尝试使用该Mockito.spy()方法实例化Class ,但我不知道这是否是正确的方法(它不起作用)或者我还应该做些什么.
我目前的代码:
mGraph = Mockito.spy(new Graph(xAxis, leftAxis, null, false, new Graph.Style(), curve));
Mockito.when(graph.getGraphWidth()).thenReturn(400);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息,但我不知道它是否相关或只是另一个错误:
java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property)