【问题标题】:JUnit 4.11 get test result in @AfterJUnit 4.11 在@After 中获取测试结果
【发布时间】:2014-03-31 22:41:16
【问题描述】:

有什么方法可以在拆解(@After)方法中得到测试结果?我想根据结果在测试后进行清理。

在 junit 文档中找不到有关 @After 的更多详细信息。

【问题讨论】:

    标签: java junit junit4


    【解决方案1】:

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

    【讨论】:

    • 由于 testwatcher 实现了 succeededfailed 方法,这将告诉您测试结果是什么 - 所以 IMO 这应该是公认的答案
    【解决方案2】:

    是的,如果你使用TestNG,它是一个标准函数,你的@After方法可以是这样的:

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

    【讨论】:

    • 是的,这就是我要找的。似乎junit不提供这种功能。 (+1)
    • 没错。 TestNG 文档对此并不十分清楚,但所有 @Configuration 方法都可以接受内置的可选参数,例如您在上面看到的,因此您可以在测试生命周期的不同部分做一些非常了不起的事情。跨度>
    【解决方案3】:

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

    写一个监听器,

    将侦听器事件推送到静态集合,

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-07
          相关资源
          最近更新 更多