2014-02-05 35 views
0

我需要使用mockito api進行powermock以進行某些JUnit測試。測試運行良好,但現在我無法運行該項目。我不明白,因爲所有新的庫在測試範圍:使用PowerMock添加測試後,Spring webapp未啓動

<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.9</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.9.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.5.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>1.5.4</version> 
     <scope>test</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
<!-- THIS IS NEEDED FOR JAVA 1.7 --> 
    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.18.1-GA</version> 
     <scope>test</scope> 
    </dependency> 

當我部署在Tomcat上的應用,我得到這個異常:

Caused by: java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile 
at org.hibernate.ejb.packaging.AbstractJarVisitor.checkAnnotationMatching(AbstractJarVisitor.java:246) 
at org.hibernate.ejb.packaging.AbstractJarVisitor.executeJavaElementFilter(AbstractJarVisitor.java:212) 
at org.hibernate.ejb.packaging.AbstractJarVisitor.addElement(AbstractJarVisitor.java:173) 
at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:126) 
... 
Caused by: java.lang.ClassNotFoundException: javassist.bytecode.ClassFile 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:154 

我不明白爲什麼測試作用域依賴性會干擾部署。

回答

3

你不是真的有關於POM足夠的信息,但是這看起來可能:

了Javassist是進入休眠模式(見here)的傳遞依賴,您添加powermock之前它被包含在您的WAR文件的結果這種依賴性。

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>XXXXX</version> 
</dependency> 

與您powermock欺騙你告訴Maven的說了Javassist不應該被包含在你的WAR文件通過明確使它測試與範圍:

<dependency> 
    <groupId>org.javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.18.1-GA</version> 
    <scope>test</scope> 
</dependency> 

因此,Javassist進行範圍變更爲runtime,它將包含在您的WAR文件中,並且您的ClassNotFoundException應該消失。

+0

謝謝!這正是問題所在。 – NeplatnyUdaj

相關問題