JUnit等待,然后继续

时间:2018-08-02 09:28:03

标签: junit java-8

我依靠某些第三方API来执行某些操作,例如删除用户。 user.delete()。不幸的是,这是无效的回报,并没有给我像CompletableFuture这样的回报。

这在集成测试中给我带来了一些问题,因为我希望在多个测试中创建一个用户,然后在测试准备好进行下一个测试时将其删除。如果第三方尚未完成删除任务,则测试不会运行。

所以我可以在测试代码中想到两个解决方案

Thread.sleep(1000);

运气非常脆弱,我不知道要花多长时间。或阻塞直到我确定用户不再存在(当用户不存在时抛出ResourceException)

private void blockUntilUserRemoved() {
    try {
        do {
            servicesClient.getUser("donald.duck@disney.com");
        } while (true);
    } catch (ResourceException e) {
        return;
    }
}

这可以工作,但是使用异常控制这样的逻辑会感到不对。问题在测试代码中有关系吗?

1 个答案:

答案 0 :(得分:2)

这与使用void返回类型所做的一样多。因此,基本上,您在此处进行了长池处理,并检查它是否已真正删除。

我可以想到的其他事情可能是 一个可以删除的数据库触发器-不知道是否有可能。但即使是-对于测试,这也需要大量的工作。另一件事是,您可以在一个单独的线程中执行此操作,并且只要结果到来,您的主线程就会更新-但是,对我而言,对于测试而言,这听起来像是一个过大的杀伤力。

另一个小建议是Thread.onSpinWait(自Java-9起)-请阅读文档,以了解它可能有多大帮助。