0

我有一个简单的测试代码来检查模拟服务:

 runtime.unsafeRun(service.run.forkDaemon)
    eventually(Timeout(Span(5, Seconds)), Interval(Span(1, Seconds))) {
      verify(someMockResult).create(any[String], any[String])
    }

service回报Task[Done]。_ 它工作正常,但我也想检查它是否unsafeRun返回succeed。我试着这样做:

runtime.unsafeRun(service.run.forkDaemon) shouldBe succeed

或者:

val result = runtime.unsafeRun(service.run.forkDaemon)
   eventually(Timeout(Span(5, Seconds)), Interval(Span(1, Seconds))) {
      result shouldBe succeed
   }

但它不起作用。有什么方法可以检查效果结果是否成功?

4

1 回答 1

0

首先,您误解了org.scalatest.Succeed(别名为succeed)的含义。仅当您需要以Assertion类型结束函数体时才需要它。assert(true)基本上等于。这不是一个实际测试某些东西的断言。

如果我理解正确,您想检查您的执行情况testTask,我们将其定义为:

val testTask: Task[Done] = service.run.forkDaemon

您的代码中同步val res = runtime.unsafeRun(testTask)执行它的问题。这意味着这行代码评估有两种可能的结果:1)它成功执行并将结果分配给变量,或2)执行失败,并引发异常。testTaskrestestTask

所以,基本上,如果没有异常,就成功了。

另一种更方便检查的方法是将其评估为Futurewithruntime.unsafeRunToFuture然后断言future最终成功。例如,您可以这样做:

assert(
  future.value match { 
    case Some(Success(_)) => true 
    case _ => false
  }
)
于 2020-12-07T17:33:46.237 回答