2013-04-06 75 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