【发布时间】:2019-09-27 09:31:16
【问题描述】:
TL;DR 我有一个 Task[Unit],在 ScalaTest/FlatSpec 中测试任务是否在给定时间范围内成功的正确方法是什么?
我有一个服务器-客户端架构的应用程序,客户端和服务器之间的交互是非阻塞的。这是通过在客户端上调用返回一个future 来实现的,该future 在服务器完成工作时完成。重要的是,这个未来不会返回结果,它只是用来表明服务器已经完成:
val notification: Task[Unit] = myServer.alterState("do this")
Await.result(notification.runAsync, 20.seconds)
我想在这里测试的是服务器是否正确地向客户端发送完成通知。我正在使用 ScalaTest 的 FlatSpec 对此进行测试,在我看来,以下应该是有效的测试:
"Server" should "notify client upon completion" in {
val notification: Task[Unit] = myServer.alterState("do this")
Await.result(notification.runAsync, 20.seconds)
}
如果服务器响应时间超过 20 秒,Await.result 将抛出异常,测试将捕获该异常并失败。
这是在 flatspec 中执行此类测试的正确方法吗?所有的匹配框架似乎都是为了测试结果的值,并捕获预期的异常,但我没有返回结果,我只是想测试未来是否成功结束。
【问题讨论】: