JUnit 4.11在@After中获得测试结果

时间:2014-03-31 22:41:16

标签: java junit junit4

有没有办法可以在拆解(@After)方法中获得测试结果?我希望在测试后根据结果进行清理。

在junit docs中找不到关于@After的更多详细信息。

5 个答案:

答案 0 :(得分:3)

与您要求的最接近的可能是TestWatcher规则。这不会让您访问返回的结果或任何内容,但您可以使用它(或创建您自己的TestRule并与Description对象结合使用,您可以不同地注释您的方法以指示清除什么类型的方法是必要的。

答案 1 :(得分:1)

为什么不在类成员中设置测试结果,然后在@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
    }
}

我怀疑你不会有太多不同的结果,有限的设置就足够了。

答案 2 :(得分:0)

如果没有标准的可能性(我很确定在JUnit 3.x中没有可能),你可以

写一个听众,

将Listener-events推送到静态Collection

并从@ After- Method中收集它们。

答案 3 :(得分:0)

是的,如果您使用TestNG,它是一个标准函数,您的@After方法可能如下所示:

@AfterTest
public void cleanUp( ITestResult result ) {
    boolean success = result.isSuccess();
    ....

答案 4 :(得分:0)

我正在使用JamesB建议的相似内容。您可能会到达必须为测试添加超时的点,然后=>>>

"在类成员中设置测试结果,然后在@After方法中对其进行操作"如果你有超过1个断言,它将永远不会工作。这是我今天的问题,当我让testCaces超时时,但我的afterClass假设一切顺利,因为最近的断言已经过去了..