2015-09-21 94 views
0

只需添加PowerMock到我的項目POM文件,這樣我就可以開始嘲笑一些靜態方法。我已驗證所有版本都是最新版本,包括Juint,Javassit和mockito。一條線是造成這個問題是這樣的:Maven的版本是工作,但JUnit是扔的NoSuchMethodError

@RunWith(PowerMockRunner.class)

當該行註釋掉,我的代碼貫穿Junit的罰款,與它的Junit有一個心臟發作,但maven構建完美。現在我可以習慣使用Maven構建,但是我希望能夠通過Junit調試我的測試。

我嘗試了以下方法:清理eclipse,使用maven安裝/清理/從終端和Eclipse的用戶界面構建,瘋狂地按F5,同時在黑暗的角落晃動自己2個小時。任何對這個問題的幫助將不勝感激。

以下是我嘗試作爲junit測試運行時的失敗跟蹤。

java.lang.NoSuchMethodError: javassist.CtMethod.hasAnnotation(Ljava/lang/Class;)Z 
at org.powermock.core.transformers.impl.TestClassTransformer.removeTestAnnotationsForTestMethodsThatRunOnOtherClassLoader(TestClassTransformer.java:185) 
at org.powermock.core.transformers.impl.TestClassTransformer.transform(TestClassTransformer.java:198) 
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:251) 
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180) 
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68) 
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:145) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:40) 
at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:244) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:61) 
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: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:31) 
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
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) 


      <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
      <version>1.10.19</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock</artifactId> 
      <version>1.6.2</version> 
      <scope>test</scope> 
      <type>pom</type> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-core</artifactId> 
      <version>1.6.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-module-junit4</artifactId> 
      <version>1.6.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-api-mockito</artifactId> 
      <version>1.6.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.4.GA</version> 
      <scope>test</scope> 
     </dependency> 
+0

你提到你正在使用maven,那麼你能告訴我們你的pom.xml文件嗎? –

+0

我添加了答案,請嘗試一下,讓我知道它是否解決了您的問題。 –

+0

我添加了我的Parent pom文件的一部分,並添加了它的依賴關係。 – Lencalot

回答

0

所以我用猛禽(我相信這是一個在房子的Eclipse版本),這迫使某些依賴版本安裝(即使沒有POM)。儘管我的pom文件中只有正確的版本,但Raptor先於先前安裝了不兼容的版本,這是優先考慮的。 (至少多數民衆贊成什麼,我相信發生的事情)

我不得不使用依賴管理者做一些強有力的版本控制在我父POM,我似乎已經澄清了這個問題。雖然圖書館沒有正確的方法,但還是遇到了一些問題。我最終通過尋找版本的依賴關係(由公司存儲庫管理員允許)來解決這些問題(很多修補和看哪些版本會很好)。由於存儲庫管理器,我無法下載我需要的每個依賴關係的最新版本。

如果您遇到此問題,請確保您的版本兼容,如果可以獲取最新版本的依賴關係,請執行此操作。如果沒有,請抓住一杯啤酒,並開始使用由您的存儲庫管理器提供的最新版本,並開始嘗試查找相互配合使用的版本。

2

您提供的信息不足以找出可能存在的問題。我建議你運行

mvn dependency:tree 

它會列出你所有的依賴,你有你的project.Try找到不同版本的呈三角依賴性。

另一個可能的解決方案:在類路徑中是否有正確的Javassist版本(3.18.2)?

+0

我的依賴關係都沒有不同的版本。我正在使用Javassist 3.4版本,會有更新的版本導致問題? – Lencalot

相關問題