所以我有一个删除某些对象的功能。这可能需要一段时间,例如大约半小时,我想检查一下是否已成功删除。
@Test
public void successfulThingDelete(){
Thing thing = new Thing();
deleteThing(thing);
if (thing.getStatus() == 'deleted'){
pass
}
else {
fail
}
我希望能够连续检查事物的状态(即thing.getStatus()),并通过测试是否被删除。但是,如果经过了一定的时间并且没有将其删除,则代码将失败并且应该会失败。我假设需要为此状态ping引入一个新线程,但是我不确定如何在此方法中添加该线程。感谢您的帮助!
答案 0 :(得分:0)
我猜这是一个Junit测试。 Test批注允许一个超时属性,其形式为“ ... @ Test(timeout = 1000)...”-值以毫秒为单位。因此,计算三十分钟内的毫秒数-1800000并使用该毫秒数。如果尚未完成,Junit将无法通过测试。
@Test(timeout=1800000)
public void successfulThingDelete(){...
如果测试按时进行并在时限之前完成,则通常的编码断言发生,测试结束。如果测试操作花费的时间更长,那么Junit将会中断正在运行的所有程序,并使整个测试失败。 参考-https://github.com/junit-team/junit4/wiki/timeout-for-tests
答案 1 :(得分:0)
我会去awaitility。这样您就可以编写类似的测试
@Test
public void updatesCustomerStatus() throws Exception {
// Publish an asynchronous event:
publishEvent(updateCustomerStatusEvent);
// Awaitility lets you wait until the asynchronous operation completes:
await().atMost(5, SECONDS).until(customerStatusIsUpdated());
...
}