【问题标题】:JUnit 4 @Test annotation reports test name as "unknown"JUnit 4 @Test 注释将测试名称报告为“未知”
【发布时间】:2012-04-19 05:28:30
【问题描述】:

使用 JUnit 4,我使用任务调用 junit 的 ant 构建脚本总是将测试类名称报告为“未知”。有没有不涉及从 TestCase 派生的方法来解决这个问题?

我用@Test 注解声明我的测试方法,例如:

SomeTest.java:

public class SomeTest {
    @Test
    public void doSomething() { .. }
}

并将它们收集到一个 TestSuite 中:

AllTests.java:

@RunWith(Suite.class)
@Suite.SuiteClasses( {
    SomeTest.class
})
public class AllTests {
}

然后我通过 NetBeans 调用 ant 任务,它对打印 JUnit 运行的结果提供了很好的集成支持。除了测试名称总是“未知”之外,一切似乎都找到了,例如:

6 tests passed, 2 tests failed, 2 tests caused an error (8.4s)
com.mystuff.AllTests FAILED
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown passed (0.0s)
    Unknown FAILED (0.0s)
    Unknown caused an ERROR: at org.hibernate.somethingorother.java:1234 (0.0s)
    ..etc..

测试运行正常,我通常可以从记录的堆栈跟踪中找出故障点,但报告为“未知”的所有内容都令人讨厌和迟钝。

阅读了一些 SO 帖子后,我发现有两种方法可以设置您的测试,从 TestCase 派生的旧 JUnit 3 方法和使用 @Test 注释的新 Junit 4 方法。

Not able to execute tests with @Test annotation when my test extends TestCase(Junit) in Eclipse

JUnit confusion: use 'extends TestCase' or '@Test'?

这篇文章提到“在 JUnit 4 中,测试类不再扩展通用框架类。因此不再有继承方法 getName” How to obtain test case name in JUnit 4 at runtime?

我尝试从 TestCase 扩展我的测试用例,这确实使名称被正确报告,但是这个单一的更改搞砸了它的一些生命周期,并且测试以奇怪的方式失败。我的理解是,当 JUnit 运行器看到您的测试类派生自 TestCase 时,它​​会将其作为 JUnit 3 测试用例运行,因此会忽略我的所有 @Before、@After 等注释。我看不出回到 JUnit 3 测试机制有什么意义。

【问题讨论】:

    标签: java ant junit junit4


    【解决方案1】:

    这很尴尬,但值得一提。我想我只是回答了我自己的问题。

    答案似乎是任务属性之一,enableTestListenerEvents,此处描述:http://ant.apache.org/manual/Tasks/junit.html

    我忽略了它,因为文档说“从 Ant 1.8.2 开始 - Ant 1.7.0 到 1.8.1 的行为就好像这个属性默认为真。”我正在运行 1.8.2,但我误读了它,它实际上是说在 1.8.2 中默认情况下它是关闭的。

    所以解决方法是在 build.xml 中更改我的任务:

    <junit haltonfailure="true" printsummary="on" fork="yes" dir=".">
    

    <junit haltonfailure="true" printsummary="on" fork="yes" dir="."
        enableTestListenerEvents="true">
    

    随着测试的进行,NetBeans 现在会在“测试结果”窗格中打印最新信息,包括测试名称。整个反馈体验要丰富得多。告诉你的朋友:)

    【讨论】:

      猜你喜欢
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2010-11-27
      相关资源
      最近更新 更多