in powermock-classloading-base jar
ClassloaderExecutor
private DeepClonerSPI createDeepCloner(ClassLoader classLoader) {
Class deepClonerClass = ClassLoaderUtil.loadClass("org.powermock.classloading.DeepCloner");
Constructor constructor = Whitebox.getConstructor(deepClonerClass, new Class[]{ClassLoader.class});
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.powermock.classloading.DeepCloner
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:68)
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:34)
at org.powermock.classloading.ClassloaderExecutor.createDeepCloner(ClassloaderExecutor.java:106)
at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:88)
at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:78)
at org.powermock.modules.junit4.rule.PowerMockStatement.evaluate(PowerMockRule.java:49)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
Caused by: java.lang.ClassNotFoundException: org.powermock.classloading.DeepCloner
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.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 java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:66)
I replace powermock-module-junit4-rule to powermock-module-junit4-rule-agent slove this issue.
@stoneCrystal Thanks for the comment.
I got same error as you reported. Then followed your solution and replaced testCompile "org.powermock:powermock-module-junit4-rule:${PowerMockito}" by testCompile "org.powermock:powermock-module-junit4-rule-agent:${PowerMockito}". However I'm getting new error:
java.lang.ExceptionInInitializerError
at com.grabtaxi.passenger.sdk.db.dao.RealmPOIManagerTest.<init>(RealmPOIManagerTest.java:47)
Which is pointing to @Rule in
public class RealmPOIManagerTest
{
@Rule
public PowerMockRule rule = new PowerMockRule();
@stoneCrystal same problem for me on version 1.6.4 of powermock.
using below dependencies in my pom.xml:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule-agent</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
BaseTest class has RunWith annotation with following param in it: @RunWith(SpringJUnit4ClassRunner.class)
and the class which has tests has following annotation on class:
@PowerMockIgnore( { "org.springframework.*", "org.apache.log4j", "org.mockito.*" })
@PrepareForTest({MyStaticClass.class})
public class MyTest extends BaseTest
then gettign error at the line:
@Rule
public PowerMockRule rule = new PowerMockRule();
Most helpful comment
I replace powermock-module-junit4-rule to powermock-module-junit4-rule-agent slove this issue.