java - 当 JUnit 4 使用参数化运行程序超时时添加更多信息

标签 java unit-testing junit junit4 parameterized-unit-test

我正在使用 @RunWith(value = Parameterized.class) 运行 JUnit 4 测试。这工作正常,没有问题。但是,当我的 34 个测试中的任何一个超时时,我只会收到消息 java.lang.Exception: test timed out after 15000 milliseconds。我希望它也显示测试参数。

我什至试过像下面的代码那样做(我知道这对大多数情况来说是一个糟糕的解决方案,我只是想看看我是否可以随时显示消息),但这没有用, 它仍然导致上面的消息。

private String parameter;

@Test(timeout = 15000)
public void solveAll() {
    try {
        // ... do something that might take a long time
    }
    catch (Throwable e) {
        Assert.fail(this.parameter + " failed! Because of " + e.getMessage());
    }
}

当测试结果超时时,如何让 JUnit 也显示 this.parameter

这是一个非常简单的示例测试类,显示了这个问题:

public class ShowMyMessageTest {
    @Test(timeout=1000)
    public void test() {
        try {
            Thread.sleep(3000);
        }
        catch (Throwable e) {
            Assert.fail("Timeout reached with value 42");
        }
    }
}

使用此 ShowMyMessageTest,我有时会得到预期的“超时值 42”,有时我只会得到“java.lang.Exception:测试在 1000 毫秒后超时”。在这种情况下,我希望始终获得“达到值 42 的超时”。

最佳答案

这有点hack,但你可以使用@After检查参数的状态:

@RunWith(Parameterized.class) public class FooTest {
  private boolean flag = true;
  private String param;

  public FooTest(String param) {
    this.param = param;
  }

  @Test(timeout = 1000) public void test() {
    while(true == flag);
    param = null;
  }

  @After public void after() {
    Assert.assertNull("Problem:" + param, param);
  }

  @Parameters public static Collection<Object[]> params() {
    Object[][] params = { { "foo" } };
    return Arrays.asList(params);
  }
}

另一种方法是编写您自己的 runner .

关于java - 当 JUnit 4 使用参数化运行程序超时时添加更多信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013578/

相关文章:

unit-testing - UWP MSTest 不起作用

java - JUnit 的assertArrayEquals() 如何工作?

java - Spring Junit org.h2.jdbc.JdbcSQLException : Exception opening port "9092" (port may be in use)

ios - 如何在 Xcode 6 上对应用程序扩展进行单元测试

grails - Grails:如何检查是否已将经过字段验证的字段添加到其他Domain类?

java - 单元 : How to write test case using jUnit and Mockito

Java 泛型 : parametricise a generic type

java - 如何在 Calendar 对象中将 String 转换为 dd MMM yyyy 格式

在 JAX-RS 中发送数据时出现 java.lang.ClassCastException

java - 从配置属性动态设置 @JmsListener 目的地