Ping Java函数的结果

时间:2018-08-01 15:07:03

标签: java multithreading

所以我有一个删除某些对象的功能。这可能需要一段时间,例如大约半小时,我想检查一下是否已成功删除。

@Test
public void successfulThingDelete(){
    Thing thing = new Thing();
    deleteThing(thing);
    if (thing.getStatus() == 'deleted'){
        pass
    }
    else {
        fail
    }

我希望能够连续检查事物的状态(即thing.getStatus()),并通过测试是否被删除。但是,如果经过了一定的时间并且没有将其删除,则代码将失败并且应该会失败。我假设需要为此状态ping引入一个新线程,但是我不确定如何在此方法中添加该线程。感谢您的帮助!

2 个答案:

答案 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());
    ...
}