使用最新的Flatspec和TimeLimits特性,我可以为一行代码设置超时,如下所示:
import org.scalatest.time.SpanSugar._
import org.scalatest.concurrent.TimeLimits
import org.scalatest.FlatSpec
class MyTestClass extends Flatspec with TimeLimits {
"My thread" must "complete on time" in {
failAfter(100 millis) { infiniteLoop() }
// I have also tried cancelAfter
}
}
由于超时,这应该会失败。但是,当我在Intellij中运行此测试时,它只会永远运行。
此外,我不想为每个方法重写超时,而是我想为整个类配置一次。 PatienceConfig声称这样做,但它似乎没有做任何事情。测试仍在进行中。
import org.scalatest.FlatSpec
import org.scalatest.time.{Millis, Span}
import org.scalatest.concurrent.{Eventually, IntegrationPatience}
class MyTestClass extends Flatspec with Eventually with IntegrationPatience {
implicit val defaultPatience = PatienceConfig(timeout=Span(100, Millis))
"My thread" must "complete on time" in {
inifiniteLoop()
}
}
答案 0 :(得分:0)
我自己寻找解决方案。来了一个交叉this答案,它对我有用。 我正在使用flatspec,添加了特征TimeLimitedTests
with TimeLimitedTests
然后在代码中我为每个测试编写了我的限制val timeLimit: Span = Span(2000, Millis)
由特质定义(我们重写它)。
最后它没有工作,直到我按照Rumoku在参考答案中的建议覆盖中断器
override val defaultTestInterruptor: Interruptor = new Interruptor {
override def apply(testThread: Thread): Unit = {
println("Kindly die")
testThread.stop() // deprecated. unsafe. do not use
}}
我希望这会有所帮助