2017-07-17 62 views
0

運行我得到這個錯誤:NoClassDefFound錯誤,而與PowerMock

java.lang.NoClassDefFoundError: org/powermock/reflect/proxyframework/ClassLoaderRegisterProxyFramework 
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.registerProxyframework(AbstractCommonTestSuiteChunkerImpl.java:101) 
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.chunkClass(AbstractCommonTestSuiteChunkerImpl.java:114) 
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.<init>(AbstractCommonTestSuiteChunkerImpl.java:60) 
    at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.<init>(AbstractCommonTestSuiteChunkerImpl.java:54) 
    at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.<init>(AbstractTestSuiteChunkerImpl.java:58) 
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:49) 
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32) 
    at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:34) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 
    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:33) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.ClassNotFoundException: org.powermock.reflect.proxyframework.ClassLoaderRegisterProxyFramework 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 25 more 

我已經在我的pom.xml中添加了這些依賴關係。我已經檢查了類似實現的堆棧,並進行了乾淨的安裝。我的項目正在建立文件,但運行測試正在給出錯誤。我正試圖通過日食運行。

<!-- Power Mock dependencies --> 
      <dependency> 
       <groupId>org.mockito</groupId> 
       <artifactId>mockito-all</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.powermock</groupId> 
       <artifactId>powermock-api-mockito</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.powermock</groupId> 
       <artifactId>powermock-module-junit4</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.powermock</groupId> 
       <artifactId>powermock-module-junit4-legacy</artifactId> 
       <version>1.7.0</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.powermock</groupId> 
       <artifactId>powermock-reflect</artifactId> 
       <version>1.7.0</version> 
      </dependency> 
      <dependency> 
       <groupId>org.powermock</groupId> 
       <artifactId>powermock-api-easymock</artifactId> 
       <version>1.7.0</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.easymock</groupId> 
       <artifactId>easymock</artifactId> 
       <version>3.4</version> 
       <scope>test</scope> 
      </dependency> 

我使用PowerMockRunner運行java類並使用註釋InjectMock注入我的測試類。然後使用MockStatic方法嘲笑靜態類。另外,我已經添加了PrepareForTest註釋並添加了在該位置具有靜態方法的Class。

我更新了我的代碼,並遵循了幾個例子,但是這個錯誤即將到來。我在做什麼錯了?

My code is like this. 
class A{ 
void static method testA(String str){ .... do something; } 
} 

class B{ 
    testB(String s) 
       { A.testA(s); 
    } 
} 

現在,當我嘗試使用PowerMockRunner在我的類A上運行測試用例。我在測試用例@preparefortest({A.class})上給出了註釋@runwith(PowerMockRunner.class)

+0

我的代碼是這樣的。我有一個類似的代碼 class A {void}靜態方法testA(String str){做某事; } B類testB(String s) { A.testA(s); testB(String s) } } 現在,當我嘗試使用PowerMockRunner在我的類A 上運行測試用例時。 我在測試用例上給出了註釋 @preparefortest({A.class}) @runwith(PowerMockRunner.class) – pooja

+0

進行了更改,謝謝。 – pooja

+0

永遠不要把更多的信息放入評論。或者你可以閱讀第一條評論嗎?我不能,也不想。請**編輯**您的問題,並添加所有缺少的部分! – GhostCat

回答

0

我在使用PowerMock 1.7.1時看到了同樣的錯誤。在沒有明確依賴的情況下,maven正在拉動powermock-core 1.6.5版本。爲powermock-core的版本1.7.1添加一個顯式依賴關係爲我解決了這個錯誤。

所以,你的解決方案應該是添加在powermock核心的1.7.0版本的顯式依賴:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-core</artifactId> 
    <version>1.7.0</version> 
    <scope>test</scope> 
</dependency>