2014-06-26 91 views
1

我正在運行一個過去曾經工作過的單元測試,並突然發現這個新錯誤剛剛開始顯示。這似乎是PowerMock的一個問題?任何想法這裏有什麼?java.lang.IllegalStateException:無法將類轉換爲...原因:修改方法時PowerMock內部錯誤。

我的項目依賴於使用Ivy解決的許多其他項目。這裏是發生了什麼的日誌消息:

java.lang.IllegalStateException: Failed to transform class with name com.test.MyTestClass. Reason: PowerMock internal error when modifying method. 
    at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:207) 
    at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:145) 
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:67) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:643) 
    at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:210) 
    at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:145) 
    at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:67) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:270) 
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:133) 
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:39) 
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:217) 
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:59) 
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32) 
    at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:31) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.lang.RuntimeException: PowerMock internal error when modifying method. 
    at org.powermock.core.transformers.impl.MainMockTransformer$PowerMockExpressionEditor.edit(MainMockTransformer.java:304) 
    at javassist.expr.ExprEditor.loopBody(ExprEditor.java:192) 
    at javassist.expr.ExprEditor.doit(ExprEditor.java:91) 
    at javassist.CtClassType.instrument(CtClassType.java:1385) 
    at org.powermock.core.transformers.impl.MainMockTransformer.transform(MainMockTransformer.java:75) 
    at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:203) 
    ... 36 more 
Caused by: javassist.NotFoundException: mockStatic(..) is not found in org.powermock.api.mockito.PowerMockito 
    at javassist.CtClassType.getMethod(CtClassType.java:1130) 
    at javassist.expr.MethodCall.getMethod(MethodCall.java:115) 
    at org.powermock.core.transformers.impl.MainMockTransformer$PowerMockExpressionEditor.edit(MainMockTransformer.java:283) 
    ... 41 more 

回答

1

對於我來說,這竟然是與PowerMock的版本的版本衝突正在使用的項目我的主要項目依賴。

即有兩個版本的PowerMock正在使用 - 一個依賴項目較舊的版本,以及一個由我的主項目更新的版本。

要解決它,我只需要更新我的其他項目使用的PowerMock版本。

例:在我的ivy.xml,我在我的PowerMock版更新到1.5.4,它似乎來解決這個問題:

<dependency org="org.powermock" name="powermock-core" rev="1.5.4" conf="master->default" /> 
<dependency org="org.powermock" name="powermock-api-mockito" rev="1.5.4" conf="master->default" /> 
<dependency org="org.powermock" name="powermock-module-junit4" rev="1.5.4" conf="master->default" /> 
+0

我在POM文件升級PowerMock的版本1.4.12,從1.5到但它開始給更多的測試用例失敗。任何線索? – R11G

+0

不知道....這固定了我 - 但我不確定有多大的版本跳躍之間現在PowerMock版本之間...也許我是更小(例如1.5至1.5.4?) –

相關問題