Sim*_*erg 5 java junit unit-testing junit4 parameterized-unit-test
我正在使用JUnit 4测试@RunWith(value = Parameterized.class).这很好,没有问题.但是,当我的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());
}
}
Run Code Online (Sandbox Code Playgroud)
this.parameter当测试结果超时时,如何使JUnit也显示?
这是一个非常简单的示例测试类,它显示了这个问题:
public class ShowMyMessageTest {
@Test(timeout=1000)
public void test() {
try {
Thread.sleep(3000);
}
catch (Throwable e) {
Assert.fail("Timeout reached with value 42");
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,ShowMyMessageTest我有时得到预期的"Timeout达到值42",有时我只得到"java.lang.Exception:测试超过1000毫秒后超时".在这种情况下,我希望始终获得"Timeout达到值42".
这有点像黑客,但您可以使用@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);
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是编写自己的跑步者.
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |