java - JUnit 4 @Test 注释报告测试名称为 "unknown"

标签 java ant junit junit4

使用 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 任务,NetBeans 对 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 测试机制有什么意义。

最佳答案

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

答案似乎是任务属性之一,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 现在会在“测试结果” Pane 中打印最新信息,包括测试名称。整个反馈体验要丰富得多。告诉你的 friend :)

关于java - JUnit 4 @Test 注释报告测试名称为 "unknown",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222164/

相关文章:

java - CentOS 6.4 上的 Apache Ant "Exception in thread ' main '"错误

java - Ant 通过 Jenkins : "BUILD SUCCESSFUL" in Console Output while build is still running

c# - 如何对使用线程的方法进行单元测试?

Android 用例单元测试

java - 如何通过注解注入(inject)一个对象并在这个对象上设置一个属性值

java - 将 CAS 存储到数据库中

java - 查找多维数组的索引?

java - Java中定义字符串常量的编程实践

java - 一些名为arg0、arg1等的函数参数...在编译一个JAR库之后

java.lang.NoSuchMethodError : javaxservlet. http.HttpServletRequest.isAsyncStarted()Z