java - compatible - después de actualizar a 2.7 ClassNotFoundException: org.mockito.exceptions.Reporter cuando se ejecuta la prueba
powermockito (4)
Intento configurar junit, mokito y powermock juntos, pero cuando ejecuté una prueba obtengo la excepción ClassNotFoundException :(
testCompile ''junit:junit:4.12''
testCompile ''org.mockito:mockito-core:2.7.22''
androidTestCompile ''org.mockito:mockito-core:2.7.22''
androidTestCompile "org.mockito:mockito-android:2.7.22"
testCompile ''org.robolectric:robolectric:3.3.2''
testCompile ''org.hamcrest:hamcrest-core:1.3''
testCompile ''org.powermock:powermock-core:1.6.6''
testCompile ''org.powermock:powermock-module-junit4:1.6.6''
testCompile ''org.powermock:powermock-module-junit4-rule:1.6.6''
testCompile ''org.powermock:powermock-api-mockito:1.6.6''
testCompile ''org.powermock:powermock-classloading-xstream:1.6.6''`
También intenté agregar cglib agregando:
testCompile ''cglib:cglib:3.1''
testCompile ''cglib:cglib-nodep:3.1''
Pero sin falta.
¿Podría alguien compartir la configuración de trabajo o señalarme lo que está mal?
Mi stacktrace cuando hice una prueba:
Exception in thread "main" java.lang.NoClassDefFoundError: org/mockito/exceptions/Reporter
at sun.reflect.GeneratedSerializationConstructorAccessor5.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:48)
at org.powermock.reflect.internal.WhiteboxImpl.newInstance(WhiteboxImpl.java:251)
at org.powermock.reflect.Whitebox.newInstance(Whitebox.java:139)
at org.powermock.api.extension.reporter.AbstractMockingFrameworkReporterFactory.getInstanceForClassLoader(AbstractMockingFrameworkReporterFactory.java:41)
at org.powermock.api.extension.reporter.AbstractMockingFrameworkReporterFactory.create(AbstractMockingFrameworkReporterFactory.java:35)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.getMockingFrameworkReporter(JUnit4TestSuiteChunkerImpl.java:140)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:119)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: org.mockito.exceptions.Reporter
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:190)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:77)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:67)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 21 more
Debe usar PowerMock 1.7. + (Siempre es mejor usar la última versión), y también usar powermock-api- mockito2 en lugar de powermock-api-mockito.
testImplementation "org.powermock:powermock-api-mockito2:${versions.powermock}"
Eso fue lo que funcionó para mí:
testCompile ''junit:junit:4.12''
testCompile ''org.mockito:mockito-core:2.8.0''
testCompile ''org.powermock:powermock-api-mockito2:1.7.0RC2''
testCompile ''org.powermock:powermock-module-junit4:1.7.0''
testCompile ''org.powermock:powermock-core:1.7.0''
testCompile ''org.powermock:powermock-module-junit4-rule:1.7.0''
Usar Mockito2 me solucionó el problema.
Estoy usando Kotlin 1.2.61
/ mockito 2.15
y powermock 1.7.0RC2
NO me funcionó. El conjunto de dependencias que hizo el truco para mí es:
dependencies {
testImplementation "junit:junit:4.12"
testImplementation "org.mockito:mockito-core:2.15.0"
testImplementation "io.kotlintest:kotlintest:2.0.7"
testImplementation ''org.powermock:powermock-module-junit4-rule:2.0.0-beta.5''
testImplementation ''org.powermock:powermock-core:2.0.0-beta.5''
testImplementation ''org.powermock:powermock-module-junit4:2.0.0-beta.5''
testImplementation ''org.powermock:powermock-api-mockito2:2.0.0-beta.5''
}
PowerMock 1.6 no es compatible con Mockito 2.7 (mire https://github.com/powermock/powermock/wiki/Mockito#supported-versions )
Debe usar PowerMock 1.7.0RC2 (o 1.7.0RC3 si 1.7.0RC2 no funciona), y también usar powermock-api-mockito2 en lugar de powermock-api-mockito .