You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I tried to use PowerMock with Mockito to mock one test case but it throw StackOverflowErrorexception.
I am using 1.6.3 version as below: <powermock.version>1.6.3</powermock.version> ... <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-easymock</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>
The case is as below, I want to test print method in Child, and mock Parent method. Which child method will invoke parent method twice.
class Parent { public void print() { System.out.println("print Parent"); } } class Child extends Parent { public void print() { super.print(); // invoke parent method first time System.out.println("print Child"); super.print(); // invoke parent method second time } }
Then I use below test class to test: @RunWith(PowerMockRunner.class) @PrepareForTest({ Parent.class }) public class Test { @Test public void print() { PowerMockito.suppress(MemberMatcher.method(Parent.class)); Child child = PowerMockito.spy(new Child()); child.print(); } }
When I run this test case, it throw StackOverflowError exception as below:
java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
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:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:177)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:70)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
The text was updated successfully, but these errors were encountered:
I tried to use PowerMock with Mockito to mock one test case but it throw StackOverflowError exception.
I am using 1.6.3 version as below:
<powermock.version>1.6.3</powermock.version>
...
<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-easymock</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>
The case is as below, I want to test print method in Child, and mock Parent method. Which child method will invoke parent method twice.
class Parent {
public void print() {
System.out.println("print Parent");
}
}
class Child extends Parent {
public void print() {
super.print(); // invoke parent method first time
System.out.println("print Child");
super.print(); // invoke parent method second time
}
}
Then I use below test class to test:
@RunWith(PowerMockRunner.class)
@PrepareForTest({
Parent.class
})
public class Test {
@Test
public void print() {
PowerMockito.suppress(MemberMatcher.method(Parent.class));
Child child = PowerMockito.spy(new Child());
child.print();
}
}
When I run this test case, it throw StackOverflowError exception as below:
java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
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:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:177)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:70)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
The text was updated successfully, but these errors were encountered: