在我的测试中,我有一些数据库操作未在测试级别显示为Future
。有时,我的测试运行得足够快,在我的清理中close()
发生在那些数据库操作完成之前,然后我得到了丑陋的错误。有没有办法检测有多少语句在飞行中或以其他方式阻止close()
?
答案 0 :(得分:0)
当您执行查询时,您会得到Future[A]
,其中A
是查询的结果。
您可以使用Future.sequence()
撰写所有查询以获得单个未来composedFuture
,这将在您的所有查询返回结果时完成。
现在您可以使用composedFuture.map(_ => close())
确保所有查询都已完成执行,然后关闭资源。
最佳选择是将操作公开为将来,然后组合它们。
否则你可以放Thread.sleep(someSensibleTime)
并希望你的未来在someSensibleTime
内完成,但这将使你的测试变得缓慢和错误。
答案 1 :(得分:0)
我认为它可能依赖于数据库,而不是依赖于光滑。
例如,mysql技术允许您使用查询“show processlist”查看当前正在运行的查询,并采取相应的行动。
如果这不是一个选项,我想您可以轮询数据库以观察选定的副作用,然后关闭()?