2010-02-02 102 views
0

即使在我尝试了所有来自另一篇文章的建议之后,我也无法让Maven Surefire执行我的JUnit 4测试。Surefire没有拿起Junit 4测试

我POM:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>maven-test</groupId> 
    <artifactId>maven-test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <dependencies> 
    <dependency> 
     <groupId>org.junit</groupId> 
     <artifactId>com.springsource.org.junit</artifactId> 
     <version>4.4.0</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

我的测试:

public class TestSimple { 

public void testSurePass() 
{ 
    int x = 1; 
    Assert.assertEquals(1, x); 
} 

@Test 
public void surePass() 
{ 
    int x = 1; 
    Assert.assertEquals(1, x); 
} 
} 

神火拿起testSurePass,但从来没有见过surePass。我试过mvn -X:

[INFO] [surefire:test {execution: default-test}] 
[DEBUG] dummy:dummy:jar:1.0 (selected for null) 
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.5:runtime (selected for runtime) 
[DEBUG]  org.apache.maven.surefire:surefire-api:jar:2.5:runtime (selected for runtime) 
[DEBUG] Adding to surefire booter test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-booter\2.5\surefire-booter-2.5.jar 
[DEBUG] Adding to surefire booter test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-api\2.5\surefire-api-2.5.jar 
[DEBUG] dummy:dummy:jar:1.0 (selected for null) 
[DEBUG] Retrieving parent-POM: org.apache.maven.surefire:surefire-providers:pom:2.5 for project: null:surefire-junit:jar:null from the repository. 
[DEBUG] Adding managed dependencies for unknown:surefire-junit 
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.5 
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.5 
[DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.9 
[DEBUG] org.apache.maven.surefire:surefire-junit:jar:2.5:test (selected for test) 
[DEBUG]  junit:junit:jar:3.8.1:test (selected for test) 
[DEBUG]  org.apache.maven.surefire:surefire-api:jar:2.5:test (selected for test) 
[DEBUG] Adding to surefire test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-junit\2.5\surefire-junit-2.5.jar 
[DEBUG] Adding to surefire test classpath: C:\Users\.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar 
[DEBUG] Adding to surefire test classpath: C:\Users\.m2\repository\org\apache\maven\surefire\surefire-api\2.5\surefire-api-2.5.jar 
[DEBUG] Test Classpath : 
[DEBUG] C:\Workspace\tests\maven-test\target\test-classes 
[DEBUG] C:\Workspace\tests\maven-test\target\classes 
[DEBUG] C:\Users\.m2\repository\org\junit\com.springsource.org.junit\4.4.0\com.springsource.org.junit-4.4.0.jar 
[DEBUG] Setting system property [user.dir]=[C:\Workspace\tests\maven-test] 
[DEBUG] Setting system property [localRepository]=[C:\Users\.m2\repository] 
[DEBUG] Setting system property [basedir]=[C:\Workspace\tests\maven-test] 

Surefire 2.5会自动将junit-3.8.1添加到它的测试类路径中。虽然也添加了junit-4.4.0(不是肯定的测试类路径,而是测试类路径),但junit-3.8.1似乎优先。根据http://maven.apache.org/surefire/surefire-providers/dependencies.html,Maven的surefire-api项目依赖于junit-3.8.1。

我在这里是否缺少一些配置?

回答

3

Surefire有一个junit版本的神器检测机制,它被你使用由springource打包的junit神器欺骗你。您需要将junitartifactname parameter 设置为org.junit:com.springsource.org.junit

3

我迷路了,我无法重现您的问题。但的确有JIRA问题(见EBR-220),说明您需要将以下添加到万无一失配置利用SpringSource的包装JUnit的神器时:

<junitArtifactName>org.junit:com.springsource.org.junit</junitArtifactName> 
+0

感谢帕斯卡!自从krosenvold用同样的解决方案首先回答之后,我把支票放在了他的旁边。 – 2010-02-02 18:11:43

+0

@Candy没问题,实际上完全合适。我刚刚为Jira参考发布了这个答案。 – 2010-02-02 23:09:57

1

这是可能的使用JUnit 4.x的使用Maven 1 .X:

* add Junit 4.X in your dependencies 
* Use the JUnit4TestAdapter in your test classes : 
    /** 

* @return instance of this as Junit test case 
    */ 
    public static junit.framework.Test suite() { return new JUnit4TestAdapter(MyTestClass.class); } 

* run maven with a jdk >= 5