junit - JUnit 在继续之前等待
问题描述
我依靠一些第三方 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;
}
}
这会起作用,但使用异常来控制这样的逻辑感觉不对。问题是在测试代码中是否重要?
解决方案
这与void
返回类型一样多。所以基本上你在这里做一个长池并检查它是否真的被删除了。
我能想到的其他事情可能是一个可以在删除时起作用的数据库触发器——但不知道是否可能;但即使是这样 - 对于测试,这也需要大量的工作。另一件事是,您可以在单独的线程中执行此操作,并且只要结果出现,您的主线程就会更新 - 但同样,对于我来说,对于测试来说,这听起来有点矫枉过正。
另一个小建议是Thread.onSpinWait
(从 java-9 开始) - 阅读它的文档以了解它如何帮助(有点)。
推荐阅读
- reactjs - React Gatsby Graph QL - 过滤站点地图的文章
- php - 数组中的三元运算符
- node.js - 指定未知的 buildpack 名称:“sdk-for-nodejs”在 IBM 云中
- wordpress - WordPress 中的 index.php 文件已被修改(由 Wordfence 检测到)
- javascript - 如何在角度捕获模式下触发点击功能
- javascript - 如果未选中具有相同名称的每个复选框,如何发送一些值?
- postgresql - 批量插入在 docker 容器中运行的 Postgres 数据库挂起
- flutter - 如何在 Flutter 应用中播放上传到 XAMPP 的视频?
- c++ - 如何使用 QT 从本地目录加载离线街道地图
- r - 访问时间中的垂直线