通过文档, eventually trait
重复调用传递的by-name参数,直到它 成功,或者经过了配置的最大时间休眠 两次尝试之间的配置间隔。
但是fail,
无法无条件地失败的测试;
所以我想最终使用它来等待直到成功状态到达,但是如果我已经知道测试必须失败,请使用失败使测试失败
例如
使用ffmpeg转换视频,我将等到转换未完成,但是如果转换达到“错误”状态,我要使测试失败
通过此测试
test("eventually fail") {
eventually (timeout(Span(30, Seconds)), interval(Span(15, Seconds))) {
println("Waiting... ")
assert(1==1)
fail("anyway you must fail")
}
}
我知道我无法在最终提示中进行“无条件失败”测试:看起来最终将忽略“失败”直到超时。
这是正确的行为吗?
答案 0 :(得分:1)
因此,在断言scalatest文档中,失败不应该“无条件地失败”,而是“引发异常”吗?
这是相同的,因为在Scalatest中测试失败的唯一方法是引发异常。
def eventually[T](fun: => T)(implicit config: PatienceConfig): T = {
val startNanos = System.nanoTime
def makeAValiantAttempt(): Either[Throwable, T] = {
try {
Right(fun)
}
catch {
case tpe: TestPendingException => throw tpe
case e: Throwable if !anExceptionThatShouldCauseAnAbort(e) => Left(e)
}
}
...
因此,如果要解决故障,可以使用pending
而不是fail
(但当然,测试将被报告为未决,而不是失败)。或编写自己的eventually
版本,让更多的异常通过。