Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Throw StackOverflowError when child method invoke twice parent method using PowerMock Mockito #698

Closed
shuxiang520 opened this issue Sep 13, 2016 · 1 comment

Comments

@shuxiang520
Copy link

shuxiang520 commented Sep 13, 2016

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)

thekingn0thing pushed a commit that referenced this issue Oct 22, 2016
…rent method using PowerMock Mockito

* Add tests
@thekingn0thing
Copy link
Member

I created a test to verify your issue, but I cannot reproduce it. You may find my code here: https://github.com/jayway/powermock/pull/705/files

By the way, I'm also wondering, why you use both easymock and mockito API modules?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants