是否有一种简单的方法可以在ScalaTest中实现容错?我希望运行相同的测试50次,并给出一个可容忍的误差范围,例如10%。ScalaTest:运行测试50次
在上述情况下,只有50个测试中的45个测试成功,测试才会通过。
是否有一种简单的方法可以在ScalaTest中实现容错?我希望运行相同的测试50次,并给出一个可容忍的误差范围,例如10%。ScalaTest:运行测试50次
在上述情况下,只有50个测试中的45个测试成功,测试才会通过。
要做到这一点,最好的方法是重写withFixture
并重新运行失败的测试,使用任何算法在您的特定情况下都有意义。为了获得灵感,我建议你看看ScalaTest本身的Retries
特质。该Scaladoc是在这里:
http://doc.scalatest.org/2.1.0/index.html#org.scalatest.Retries
为Retries
实际的源代码是在这里:
https://github.com/scalatest/scalatest/blob/master/src/main/scala/org/scalatest/Retries.scala
斯卡拉检查可能是一个很好的解决方案。 http://www.scalacheck.org/
这里是一个除了Bill Venners提出的解决方案。我需要为闪烁/不稳定测试执行一些重试。
val retries = 4
override def withFixture(test: NoArgTest) = {
if (isRetryable(test)) withFixture(test, retries) else super.withFixture(test)
}
def withFixture(test: NoArgTest, count: Int): Outcome = {
val outcome = super.withFixture(test)
outcome match {
case Failed(_) | Canceled(_) => if (count == 1) super.withFixture(test) else withFixture(test, count - 1)
case other => other
}
}
扩展测试类重试(with Retries
)中并用taggedAs Retryable
每个测试。需要时的这种测试将重试4次。