【发布时间】:2014-03-31 22:41:16
【问题描述】:
有什么方法可以在拆解(@After)方法中得到测试结果?我想根据结果在测试后进行清理。
在 junit 文档中找不到有关 @After 的更多详细信息。
【问题讨论】:
有什么方法可以在拆解(@After)方法中得到测试结果?我想根据结果在测试后进行清理。
在 junit 文档中找不到有关 @After 的更多详细信息。
【问题讨论】:
最接近您要求的可能是TestWatcher 规则。这不会让您访问返回的结果或任何内容,但您可以使用它(或创建您自己的 TestRule 并结合 Description 对象,您可以对您的方法进行不同的注释以指示需要进行哪种清理.
【讨论】:
testwatcher 实现了 succeeded 和 failed 方法,这将告诉您测试结果是什么 - 所以 IMO 这应该是公认的答案
是的,如果你使用TestNG,它是一个标准函数,你的@After方法可以是这样的:
@AfterTest
public void cleanUp( ITestResult result ) {
boolean success = result.isSuccess();
....
【讨论】:
如果没有标准的可能性(我很确定在 JUnit 3.x 中没有可能性),你可以
写一个监听器,
将侦听器事件推送到静态集合,
并从您的@After- 方法中收集它们。
【讨论】:
为什么不在类成员中设置测试结果,然后在@After 方法中对其进行操作?
public enum TestResult {
...
}
public class TestClass {
private TestResult result;
...
@Test
public void aTest() {
// set up test
// call class under test
// assert something and set result based upon outcome
this.result = ...;
}
...
@After
public void teardown() {
// clean up based upon this.result
}
}
我怀疑你不会有太多不同的结果,有限集就足够了。
【讨论】:
我正在使用类似 JamesB 建议的东西。您可能会遇到必须为测试添加超时的地步,然后 =>>
“在类成员中设置测试结果,然后在 @After 方法中对其进行操作”如果您有超过 1 个断言,则并不总是有效。这是我今天的问题,当我的 testCaces 超时时,但我的 afterClass 假设一切顺利,因为最近的断言已经通过..
【讨论】: