java - Surefire 没有接受 Junit 4 测试

标签 java maven-2 maven surefire

由于某种原因,我无法让 Maven 2 Surefire 插件执行 JUnit 4 测试类。

public class SimpleTest {
  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

但是,如果我将此类更改为 JUnit-3 之类的,例如

public class SimpleTest extends junit.framework.TestCase {
  public void testBar() {
     System.out.println("bar");
  }

  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

然后它被执行。这是我所做的:

  • 经过验证的 Maven 版本:Apache Maven 2.2.1 (r801777; 2009-08-06 20:16:01+0100)
  • 已验证 Surefire 版本:关注 this建议
  • 已验证 Surefire 版本:检查了我的 ~/.m2/repository/org/apache/maven/surefire 中的 Surefire jar -- 它们都是 2.4.2 或 2.4.3 版本
  • 做过mvn dependency:tree | grep junit确保我只依赖junit 4.7版

我遇到此问题的模块没有 JUnit 3 测试。

我还有什么遗漏的吗?

最佳答案

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.4.3:runtime (selected for runtime)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.4.3:runtime (selected for runtime)
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.testng:testng:jar:jdk15:5.8:test (selected for test)
[DEBUG]     junit:junit:jar:3.8.1:test (selected for test)
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/org/testng/testng/5.8/testng-5.8-jdk15.jar
[DEBUG] Adding to surefire booter test classpath: /home/mindas/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] Retrieving parent-POM: org.apache.maven.surefire:surefire-providers:pom:2.4.3 for project: null:surefire-testng:jar:null from the repository.
[DEBUG] Adding managed dependencies for unknown:surefire-testng
[DEBUG]   org.apache.maven.surefire:surefire-api:jar:2.4.3
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.4.3
[DEBUG]   org.codehaus.plexus:plexus-utils:jar:1.5.1
[DEBUG]   org.apache.maven.surefire:surefire-testng:jar:2.4.3:test (selected for test)
[DEBUG]     org.apache.maven:maven-artifact:jar:2.0:test (selected for test)
[DEBUG]       org.codehaus.plexus:plexus-utils:jar:1.0.4:test (selected for test)
[DEBUG]     junit:junit:jar:3.8.1:test (selected for test)
[DEBUG]     org.testng:testng:jar:jdk15:5.7:test (selected for test)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.4.3:test (selected for test)
...
[DEBUG] Test Classpath :
...
[DEBUG]   /home/mindas/.m2/repository/junit/junit/4.7/junit-4.7.jar

所以问题似乎来自需要 JUnit v3.8.1 的 testng jar。尽管 Test Classpath 被设置为依赖于 JUnit 4,但为时已晚。

testng 依赖项位于我的 POM 中:

<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>5.8</version>
  <scope>test</scope>
  <classifier>jdk15</classifier>
</dependency>

在我注释掉它之后,测试立即开始执行。

经验教训:

  • mvn dependency:tree 总是不够的,mvn -X 是 friend 。
  • surefire 不是为开发者天堂而生的(我在查看项目 JIRA 报告时意识到了这一点)。尤其如此,因为如果您使用 Maven,则没有其他选择。

感谢大家的帮助。不幸的是,没有办法在 Pascal 和 Kaleb 之间分配答案点,但是 Kaleb 使用 mvn -X 的建议帮助我走上了正确的轨道,因此正确的答案点归他所有。

关于java - Surefire 没有接受 Junit 4 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2021771/

相关文章:

java - 用于 couchdb 的 Cloudant 同步;如何将android移植到J2SE

java - 如何使用音频指纹获取音频标签

maven-2 - 在 Maven 构建期间将内存中的 HSQL 数据库内容导出为 SQL

maven - Jenkins 在 mercurial commit 之后构建

java - Maven:如何找到依赖于另一个 Artifact 的 Artifact

java - 在IDE中运行.feature文件不会读取cucumber runner类

java - 如何找到抽象方法 hasNext() 的实现?

java - 从嵌套结构中删除谓词(google guava 谓词)

java - 如何在 Eclipse/IntelliJ 中正确设置 Maven 项目

java - Axis2 客户端的最小类路径是什么?