由于某种原因,我无法让 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 https://stackoverflow.com/questions/1336379/how-do-i-configure-maven-2s-surefire-plugin-to-run-junit-4-5 advice
- 已验证的 Surefire 版本:检查了我的 Surefire 罐子
~/.m2/repository/org/apache/maven/surefire
-- 它们都是版本 2.4.2 或 2.4.3
- done a
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
所以看来问题出在testng
需要 JUnit v3.8.1 的 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
是朋友。
- Surefire 并不是为开发者天堂而设计的(我在查看项目 JIRA 报告时意识到了这一点)。尤其如此,因为如果您使用 Maven,就没有其他选择。
感谢大家的帮助。不幸的是,没有办法在 Pascal 和 Kaleb 之间分割答案点,但 Kaleb 的建议是使用mvn -X
帮助我走上正确的轨道,所以正确的答案分给了他。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)