powermock: powermock causes Mockito's initMocks to fail when using @Mock
From jon.cho…@actifio.com on December 04, 2012 20:16:54
Here is my class under test:
public class MockMe {
private static final MockMe ME = new MockMe();
public static MockMe getInstance() {
return ME;
}
}
And here is my test:
import static org.mockito.MockitoAnnotations.initMocks; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; import static org.testng.Assert.assertEquals;
import org.powermock.core.classloader.annotations.Mock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockObjectFactory; import org.testng.IObjectFactory; import org.testng.annotations.BeforeTest; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test;
@PrepareForTest({MockMe.class}) public class TestTest {
@ObjectFactory
public IObjectFactory getObjectFactory() {
return new PowerMockObjectFactory();
}
@Mock
public MockMe mockMe;
@BeforeTest
public void init() {
initMocks(this);
mockStatic(MockMe.class);
when(MockMe.getInstance()).thenReturn(mockMe);
}
@Test
public void sampleTest() {
MockMe mockMe1 = MockMe.getInstance();
assertEquals(mockMe1, mockMe);
}
}
When I run this test it succeeds but If I replace the deprecated
org.powermock.core.classloader.annotations.Mock
with the appropriate
org.mockito.Mock
The test fails with the following stack trace:
FAILED CONFIGURATION: @BeforeTest init java.lang.ExceptionInInitializerError at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.<init>(ConditionalStackTraceFilter.java:17) at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:30) at org.mockito.exceptions.base.MockitoException.<init>(MockitoException.java:19) at org.mockito.exceptions.misusing.MockitoConfigurationException.<init>(MockitoConfigurationException.java:18) at org.mockito.internal.configuration.ClassPathLoader.loadImplementations(ClassPathLoader.java:145) at org.mockito.internal.configuration.ClassPathLoader.findPluginImplementation(ClassPathLoader.java:110) at org.mockito.internal.configuration.ClassPathLoader.findPlatformMockMaker(ClassPathLoader.java:106) at org.mockito.internal.configuration.ClassPathLoader.<clinit>(ClassPathLoader.java:59) at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:21) at org.mockito.internal.MockitoCore.<init>(MockitoCore.java:40) at org.mockito.internal.stubbing.defaultanswers.ReturnsMocks.<init>(ReturnsMocks.java:18) at org.mockito.Answers.<clinit>(Answers.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at java.lang.Class.getEnumConstantsShared(Class.java:2942) at java.lang.Class.enumConstantDirectory(Class.java:2963) at java.lang.Enum.valueOf(Enum.java:191) at sun.reflect.annotation.AnnotationParser.parseEnumValue(AnnotationParser.java:413) at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:278) at java.lang.reflect.Method.getDefaultValue(Method.java:720) at sun.reflect.annotation.AnnotationType.<init>(AnnotationType.java:99) at sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:66) at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:202) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69) at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52) at java.lang.reflect.Field.declaredAnnotations(Field.java:1014) at java.lang.reflect.Field.getAnnotation(Field.java:1000) at java.lang.reflect.AccessibleObject.isAnnotationPresent(AccessibleObject.java:168) at org.powermock.reflect.internal.matcherstrategies.FieldAnnotationMatcherStrategy.matches(FieldAnnotationMatcherStrategy.java:37) at org.powermock.reflect.internal.WhiteboxImpl.findAllFieldsUsingStrategy(WhiteboxImpl.java:535) at org.powermock.reflect.internal.WhiteboxImpl.getFieldsAnnotatedWith(WhiteboxImpl.java:2343) at org.powermock.reflect.Whitebox.getFieldsAnnotatedWith(Whitebox.java:585) at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:70) at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:2014) at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:744) at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:415) at org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.injectMocksUsingAnnotationEnabler(PowerMockTestNGMethodHandler.java:72) at org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.invoke(PowerMockTestNGMethodHandler.java:47) at com.actifio.psrv.util.analysis.TestTest_$$javassist_0.init(TestTest$$_javassist_0.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138) at org.testng.TestRunner.beforeRun(TestRunner.java:641) at org.testng.TestRunner.run(TestRunner.java:609) at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) at org.testng.SuiteRunner.run(SuiteRunner.java:240) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.TestNG.privateMain(TestNG.java:1338) at org.testng.TestNG.main(TestNG.java:1307) Caused by: java.lang.NullPointerException at org.mockito.internal.exceptions.stacktrace.S…
_Original issue: http://code.google.com/p/powermock/issues/detail?id=414_
About this issue
- Original URL
- State: open
- Created 9 years ago
- Comments: 21
The simplest example I think:
Extending PowerMockTestCase fixes it. Hope that helps.