【问题标题】:Is there a way to force Maven Surefire or JUnit to indicate the name of the failing test class when executed from a Test Suite?当从测试套件执行时,有没有办法强制 Maven Surefire 或 JUnit 指示失败的测试类的名称?
【发布时间】:2011-08-27 09:14:52
【问题描述】:

我的问题:有没有办法强制 Maven Surefire(或 JUnit?)在从测试套件执行此类时指示失败的测试类的名称?

现在,漫长的故事。

假设您有一个启动两个 JUnit 测试的 JUnit 测试套件。

测试类示例:

public class TestOne {

    @Test
    public void foo() {
        assertTrue(false);
    }

    @Test
    public void bar() {
        assertTrue(false);
    }

}

@UnitTest
public class TestTwo {

    @Test
    public void foo() {
        assertFalse(true);
    }

}

和测试套件:

@RunWith(Suite.class)
@SuiteClasses(value = { TestOne.class, TestTwo.class })
public class MySuite {

}

现在,如果我运行测试套件 (mvn test -Dtest=MySuite),我会遇到以下错误:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running caf.opm.preclosing.junit.MySuite
Tests run: 3, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec <<< FAILURE!

Results :

Failed tests:
  foo(my.project.junit.TestOne)
  bar(my.project.junit.TestOne)
  foo(my.project.junit.TestTwo)

Tests run: 3, Failures: 3, Errors: 0, Skipped: 0

所以阅读这些行,我可以很容易地检测出哪些类和测试失败了。

但是,在target/surefire-reports/ 目录中,我只有一个文件MySuite.txt,其中三个测试都失败了。 这种情况的后果之一是我的 Hudson 构建将向我显示以下信息:

All Failed Tests
Test Name       Duration    Age   
>>> my.project.junit.MySuite.foo    0.0 1
>>> my.project.junit.MySuite.bar    0.0 1
>>> my.project.junit.MySuite.foo    0.0 1

如您所见,识别失败的测试变得更加困难,例如,TestOne.foo()TestTwo.foo() 失败,我在 JUnit 报告中看到了两个 MySuite.foo 错误。 当然我可以通过阅读失败测试的日志来检索测试类的名称,但这并不是真正的解决方案……

所以我的问题是我是否可以强制 Surefire(或 JUnit?)指示测试类的名称。

谢谢。

【问题讨论】:

  • 您是否需要使用自定义TestSuite - 您可以让 Hudson/Maven 简单地执行所有的测试吗?测试阶段的默认行为将执行所有测试,并按照您的预期报告它们。
  • 您使用哪个版本的 surefire 插件?根据我的经验,surefire-reports 文件夹中应该有补充文件...
  • 您为什么使用套件?为什么不让万无一失呢……
  • @matt b 和@khmarbaise 如果您真的想了解我为什么需要运行suite,请在此处阅读整个故事:stackoverflow.com/questions/4970196/…
  • 我刚刚尝试了 Surefire 2.8,但没有成功...

标签: java maven junit surefire test-suite


【解决方案1】:

每个测试类都有一个文件,所以我花了一点时间才弄明白:你正在使用一个测试套件。

使用测试套件时,所有测试结果都以套件名称保存在一个文件中。

没有选项可以更改此行为。试试file a feature request

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多