使用 JUnit 4,我的 ant 构建脚本在任务中调用 junit 总是将测试类名称报告为"未知"。 有没有一种方法可以解决这个问题,不涉及从测试用例派生?
我用@Test注释声明我的测试方法,例如:
一些测试.java:
public class SomeTest {
@Test
public void doSomething() { .. }
}
并将它们一起收集到测试套件中:
全部测试.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帖子后,我发现有两种方法可以设置测试,旧的JUnit 3方法派生自TestCase,以及新的Junit 4使用@Test注释的方式。
当我的测试在 Eclipse 中扩展 TestCase(Junit) 时,无法使用@Test注释执行测试
JUnit混淆:使用"扩展测试用例"还是"@Test"?
这篇文章提到"在JUnit 4中,测试类不再扩展公共框架类。所以不再有继承的方法 getName"如何在运行时获取JUnit 4中的测试用例名称?
我尝试从 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 中它默认关闭。
所以解决方法是在构建中更改我的任务.xml:
<junit haltonfailure="true" printsummary="on" fork="yes" dir=".">
自
<junit haltonfailure="true" printsummary="on" fork="yes" dir="."
enableTestListenerEvents="true">
NetBeans 现在会在测试过程中在"测试结果"窗格中打印最新信息,包括测试名称。 整个反馈体验要丰富得多。 告诉你的朋友:)