ScalaTest中是否有一种简单的方法来实现容错?我希望运行相同的测试50次并给它一个可容忍的误差范围,例如10%。
在上述情况下,如果50项测试中有45项成功,测试将通过。
答案 0 :(得分:6)
最好的方法是覆盖withFixture
并使用在特定情况下有意义的任何算法重新运行失败的测试。为了获得灵感,我建议您查看ScalaTest本身的Retries
特征。斯卡拉多克在这里:
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
答案 1 :(得分:2)
Scala-check可能是一个很好的解决方案。 http://www.scalacheck.org/
答案 2 :(得分:2)
以下是Bill Venners提议的解决方案的补充。我需要为闪烁/不稳定测试执行一些重试。
d.setVar
重试(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
的每个测试。需要时进行的此类测试最多可重试4次。