ping java函数的结果
我有一个函数,可以删除一些对象。这可能需要一段时间,比如半小时,我想检查它是否被成功删除ping java函数的结果,java,multithreading,Java,Multithreading,我有一个函数,可以删除一些对象。这可能需要一段时间,比如半小时,我想检查它是否被成功删除 @Test public void successfulThingDelete(){ Thing thing = new Thing(); deleteThing(thing); if (thing.getStatus() == 'deleted'){ pass } else { fail } 我希望能够持续地检查对象的状态(
@Test
public void successfulThingDelete(){
Thing thing = new Thing();
deleteThing(thing);
if (thing.getStatus() == 'deleted'){
pass
}
else {
fail
}
我希望能够持续地检查对象的状态(即thing.getStatus()),并在删除时通过测试。但是如果某个时间过去了,并且没有删除,那么代码就失败了,应该失败。我假设我需要为这个状态ping引入一个新线程,但我不确定如何在这个方法中添加它。谢谢你的帮助 我猜这是一个Junit测试。测试注释允许使用格式为“…@Test(timeout=1000)…”的超时属性-该值以毫秒为单位。因此,计算30分钟内的毫秒数——1800000,然后使用它。如果Junit没有在这段时间内完成,它将无法通过测试
@Test(timeout=1800000)
public void successfulThingDelete(){...
如果测试运行并在时间限制之前完成,那么通常的编码断言就会发生,测试也会结束。如果测试操作需要更长的时间,那么Junit将中断任何正在运行的操作,并使整个测试失败。
Ref-我会选择。有了它,您可以编写如下测试
@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());
...
}
当然,这不会像你原来的帖子所说的那样持续测试,但我认为它实现了你的目标。读取“…deleteThing(thing)…”的代码会在工作时等待吗?或者该方法会在其他进程实际执行“delete ing”时完成吗?但是如果删除很快发生,我仍然需要花费30分钟进行测试。有了这个,如果删除很快发生-也就是说deleteThing(thing)调用完成-那么if-then将立即检查状态,那么我必须让时钟耗尽。整个过程将在那时完成,而不是在三十分钟内。我必须问清楚——当方法deleteThing(…)完成时——这个过程也完成了吗?还是有其他的繁衍过程在幕后发生?后一种情况需要类似Chris311所说的异步处理。但是如果deleteThing(…)方法没有更多的事情要做,那么您就可以检查状态了。这对于我需要测试的许多异步任务来说似乎很有用。阅读这样一个函数是一个很大的改进,它超越了通过循环检查状态和重新检查直到timesup。