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

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

在junit docs中找不到关于@After更多细节。

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

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

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

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

写一个听众,

将Listener-events推送到静态Collection,

并从你的@ After-方法中收集它们。

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

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

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

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