Nee*_*eek 4 java ant junit junit4
使用JUnit 4,我的ant构建脚本调用junit与任务总是将测试类名称报告为"未知".有没有办法解决这个问题,而不涉及从TestCase派生?
我使用@Test注释声明我的测试方法,例如:
SomeTest.java:
public class SomeTest {
@Test
public void doSomething() { .. }
}
Run Code Online (Sandbox Code Playgroud)
并在TestSuite中收集它们:
AllTests.java:
@RunWith(Suite.class)
@Suite.SuiteClasses( {
SomeTest.class
})
public class AllTests {
}
Run Code Online (Sandbox Code Playgroud)
然后我通过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..
Run Code Online (Sandbox Code Playgroud)
测试运行正常,我通常可以从记录的堆栈跟踪中找出故障点,但报告为"未知"的所有内容都令人烦恼和迟钝.
阅读了几篇SO帖子后,我发现有两种方法可以设置你的测试,旧的JUnit 3方法是从TestCase派生的,以及新的Junit 4方式使用@Test注释.
当我的测试在Eclipse中扩展TestCase(Junit)时,无法使用@Test注释执行测试
JUnit混淆:使用'extends TestCase'还是'@Test'?
这篇文章提到"在JUnit 4中,测试类不再扩展一个公共框架类.所以没有继承的方法getName" 如何在运行时获取JUnit 4中的测试用例名?
我尝试从TestCase扩展我的测试用例,这确实正确地报告了这个名称,但是这个单一的更改搞砸了它的一些生命周期,并且测试以bizzarre的方式失败了.我的理解是,当JUnit运行器看到你的测试类派生自TestCase时,它将作为JUnit 3测试用例运行,因此会忽略我的所有@Before,@ Aftert等注释.我没有看到退回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=".">
Run Code Online (Sandbox Code Playgroud)
至
<junit haltonfailure="true" printsummary="on" fork="yes" dir="."
enableTestListenerEvents="true">
Run Code Online (Sandbox Code Playgroud)
随着测试的进展,NetBeans现在可以在"测试结果"窗格中打印最新信息,包括测试名称.整个反馈体验更加丰富.告诉你的朋友 :)
| 归档时间: |
|
| 查看次数: |
2248 次 |
| 最近记录: |