我正在使用 @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/