将 Espresso 添加到项目时出现 Mockito 异常
Mockito exception when Espresso added to project
我在我的项目中成功地使用了 Mockito,然后我决定添加一些 Espresso 测试(如此处所述:https://developer.android.com/training/testing/ui-testing/espresso-testing.html#build)但我被卡住了 - 当我将 espresso 添加到我的 build.gradle 并且我在使用 Mockito 时遇到问题。
当 Mockito 工作正常时,我在 build.gradle 中的依赖项,例如我使用 Mockito 的测试通过了:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
testCompile 'junit:junit:4.12'
//Mockito framework
testCompile 'org.mockito:mockito-core:1.10.19'
// https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.6.4'
testCompile 'org.powermock:powermock-api-mockito:1.5.5'
androidTestCompile ('com.android.support:support-annotations:23.4.0')
//androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.2')
}
当我取消注释最后一行以包含 com.android.support.test.espresso:espresso-core:2.2.2 并且我再次 运行 我的测试时,其中一些出现以下错误:
java.lang.IllegalAccessError: class org.mockito.internal.creation.jmock.ClassImposterizer cannot access its superclass org.mockito.internal.creation.cglib.MockitoNamingPolicy
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.mockito.internal.creation.jmock.ClassImposterizer.<clinit>(ClassImposterizer.java:38)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.powermock.api.mockito.internal.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:43)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
at org.mockito.Mockito.spy(Mockito.java:1368)
at todolistj.todolist.unittest.CustomClass.size(CustomClass.java:54)
所有失败的测试都在 Mockito.spy
或 Mockito.mock
方法上失败。类似于:
CustomClass1 li1 = Mockito.spy(new CustomClass1(somevar));
或
View vm= Mockito.mock(View.class);
如有任何帮助,我们将不胜感激!
Mockito
没有问题,但 Powermock
有问题,这取决于 Mockito
的旧版本。
更新此库依赖项或从 Powermock
gradle 依赖项中排除 mockito
。
我在我的项目中成功地使用了 Mockito,然后我决定添加一些 Espresso 测试(如此处所述:https://developer.android.com/training/testing/ui-testing/espresso-testing.html#build)但我被卡住了 - 当我将 espresso 添加到我的 build.gradle 并且我在使用 Mockito 时遇到问题。
当 Mockito 工作正常时,我在 build.gradle 中的依赖项,例如我使用 Mockito 的测试通过了:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
testCompile 'junit:junit:4.12'
//Mockito framework
testCompile 'org.mockito:mockito-core:1.10.19'
// https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.6.4'
testCompile 'org.powermock:powermock-api-mockito:1.5.5'
androidTestCompile ('com.android.support:support-annotations:23.4.0')
//androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.2')
}
当我取消注释最后一行以包含 com.android.support.test.espresso:espresso-core:2.2.2 并且我再次 运行 我的测试时,其中一些出现以下错误:
java.lang.IllegalAccessError: class org.mockito.internal.creation.jmock.ClassImposterizer cannot access its superclass org.mockito.internal.creation.cglib.MockitoNamingPolicy
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.mockito.internal.creation.jmock.ClassImposterizer.<clinit>(ClassImposterizer.java:38)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.powermock.api.mockito.internal.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:43)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
at org.mockito.Mockito.spy(Mockito.java:1368)
at todolistj.todolist.unittest.CustomClass.size(CustomClass.java:54)
所有失败的测试都在 Mockito.spy
或 Mockito.mock
方法上失败。类似于:
CustomClass1 li1 = Mockito.spy(new CustomClass1(somevar));
或
View vm= Mockito.mock(View.class);
如有任何帮助,我们将不胜感激!
Mockito
没有问题,但 Powermock
有问题,这取决于 Mockito
的旧版本。
更新此库依赖项或从 Powermock
gradle 依赖项中排除 mockito
。