2013-04-06 78 views
2

我對maven相對較新,並且一直在努力測試附加測試,我在這裏發現了一些文章,這些文章讓我成爲那裏的一部分,但不能完全得到最後一點位。這是我想要做的。我有2個模塊,它定義了一組接口和這些接口的基本測試。第二個模塊提供了接口的實現,我想運行預定義的測試。我煮它歸結爲一個簡單的例子,這裏有兩個項目:Maven執行單個附加測試

interface 
+ pom.xml 
+ src 
    + main 
     + java 
      + demo 
      + Messenger.java 
    + test 
     + java 
      + demo 
      + MessengerTest.java 

impl 
+ pom.xml 
+ src 
    + main 
     + java 
      + demo 
      + impl 
       + MessengerImpl.java 
    + test 
     + resources 
      + context.xml 

接口的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven- 4.0.0.xsd"> 
    <groupId>demo</groupId> 
    <artifactId>interface</artifactId> 
    <version>1.0</version> 
    <modelVersion>4.0.0</modelVersion> 
    <packaging>jar</packaging> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.2.2.RELEASE</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.14</version> 
     <configuration> 
      <skipTests>true</skipTests> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

的Messenger.java來源:

package demo; 

public interface Messenger { 
    String getMessage(); 
} 

的MessengerTest .java源:

package demo; 

import static org.junit.Assert.assertNotNull; 
import static org.junit.Assert.assertTrue; 

import org.junit.Before; 
import org.junit.Test; 
import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import demo.Messenger; 

public class MessengerTest { 
    private BeanFactory beanfactory; 

    @Before 
    public void setUp() throws Exception { 
     beanfactory = new ClassPathXmlApplicationContext("context.xml"); 
    } 

    @Test 
    public final void testGetMessage() throws Exception { 
     final Messenger msngr = beanfactory.getBean(Messenger.class); 
     String msg = msngr.getMessage(); 
     assertNotNull(msg); 
     assertTrue(msg.length() > 0); 
    } 
} 

執行'mvn install'似乎在我的本地存儲庫中創建interface-1.0.jar和interface-1.0-tests.jar是正確的。

的實現代碼很簡單,pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <groupId>demo</groupId> 
    <artifactId>impl</artifactId> 
    <version>1.0</version> 
    <modelVersion>4.0.0</modelVersion> 
    <packaging>jar</packaging> 

    <dependencies> 
    <dependency> 
     <groupId>demo</groupId> 
     <artifactId>interface</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>demo</groupId> 
     <artifactId>interface</artifactId> 
     <version>1.0</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

</project> 

的MessageImpl.java來源:

package demo.impl; 

import demo.Messenger; 

public class MessengerImpl implements Messenger { 

    @Override 
    public String getMessage() { 
     return "Hello World"; 
    } 
} 

最後,Spring上下文文件:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    <bean id="MyMessenger" class="demo.impl.MessengerImpl"/> 
</beans> 

有了這一切,我執行了「mvn -Dtest = demo.MessengerTest測試」,不幸的是它失敗了「......沒有測試ts被執行了!「。所以有這個問題。

對不起,由於這麼長時間囉嗦,但我想要相當完整,任何指導將不勝感激。

+0

你有' true'設置在maven-surefire插件中:這可能是問題嗎? – torquestomp 2013-04-06 00:19:25

+0

我相信只會影響接口構件的構建,因此沒有實現類,因此測試無法在安裝之前運行。 – rgmoul 2013-04-06 00:40:02

+0

我確認了這一點,我將它從pm中刪除並重新安裝(在命令行中指定-Dtest.skip = true)並獲得相同的結果。 – rgmoul 2013-04-06 00:45:39

回答

1

Surefire在決定運行哪些類時不會掃描類路徑,因此通常只考慮在同一模塊中定義的測試。它在impl項目中檢查target/classes,沒有看到任何測試,並且忽略MessengerTest。您可以在impl項目中定義一個測試套件,該套件引用要運行的測試,或將依賴項解壓縮到target/classes

+0

我已經使用包含來自接口模塊的測試的測試套件進行了測試,這確實起作用,這是我的回退位置。謝謝。 – rgmoul 2013-04-06 05:18:51