当前位置: 首页 > 面试题库 >

Surefire没有接受Junit 4测试

东郭良弼
2023-03-14
问题内容

由于某种原因,我无法获得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版本:遵循此建议
  • 经过验证的Surefire版本:我的选中的Surefire罐子~/.m2/repository/org/apache/maven/surefire-全部都是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

因此,似乎问题出在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帮助我走上了正确的道路,所以正确的答案就归于他。



 类似资料:
  • 我有一个工作环境,包括我不管理的bom和JUnit5测试,除非我从如果我从它们不会被maven surefire插件拾取。我阅读了许多部分,并在一个较小的项目中进行了测试,它的工作和拾取,我不知道该在这篇文章中包含什么,因此您有足够的信息来查看问题所在。此外,如果有人能解释我阅读的导入的幕后内容,JUnit 4和5都需要使用surefire即 与版本 我很感激。 注意到 < li >我的测试都在s

  • 我打算用@Category注释来注释我的一些JUnit4测试。然后,我想将这类测试排除在我的Maven版本上运行。 我从Maven文档中看到,可以指定要运行的测试类别。我想知道如何指定一类不运行的测试。 谢谢

  • 我正在尝试将一个梅文Spring靴(2.3.12)应用程序从JUnit4转换为JUnit5。我已经阅读了很多关于如何做到这一点的不同帖子。 我能够在Eclipse中执行我的JUnit5测试。 我的问题是我无法让Maven Surefire执行我的JUnit5测试。我尝试了各种配置变体。当它到达Surefire步骤时,它只执行我以前的JUnit4测试,并且简单地忽略任何JUnit5测试。我已经验证了

  • 我目前使用的是Android Studio版本1.0.2。我已经创建了几个类,并让Android Studio为我生成了一些JUnit4测试框架。当我生成这些测试时,它通知我在模块中找不到JUnit4库。有一个按钮说“修复”,所以我点击了它,它允许我创建一个新的测试。我也检查了git,它似乎没有改变任何其他文件。 在尝试运行这些测试时,我似乎遇到了一个错误。 下面是我的测试结果 错误:任务“:ap

  • 主要内容:1 Junit分类测试的介绍,2 在Maven中进行分类测试,3 在Gradle中进行分类测试,4 在SBT中进行分类测试,5 分类测试的典型用法1 Junit分类测试的介绍 从给定的一组测试类中,类别运行器仅运行用@IncludeCategory批注指定的类别或该类别的子类型进行批注的类和方法。类或接口都可以用作类别。子类型有效,因此,如果您说@IncludeCategory(SuperClass.class),则会运行标记为@Category({SubClass.class})的测

  • 主要内容:1 概述,2 @Test注释上的超时参数(适用于测试方法),3 超时规则(适用于测试类中的所有测试用例),4 使用JUnit Foundation进行全局超时管理1 概述 在此示例中,我们将了解测试完成所花费的时间是否超过定义的“timeout”,将抛出TestTimedOutException并将测试标记为失败。 “runaway”或花费太长时间的测试可能会自动失败。有两种方法可以实现此行为: @Test注释上的超时参数(适用于测试方法) 使用JUnit Foundation进行全局