Scala 在代码中设置akka TestKit默认超时
在非配置代码中为Scala 在代码中设置akka TestKit默认超时,scala,akka,Scala,Akka,在非配置代码中为TestProbe.expectNoMsg()设置默认超时的正确方法是什么 我知道我可以在application.conf中定义akka.test.single expect default,但这适用于我模块中的所有测试。或者类似的 ActorSystem(.., ConfigFactory.parseString("{akka.test.single-expect-default = 0}")) 在代码中工作,但我希望能够像这样设置此超时 implicit val timeo
TestProbe.expectNoMsg()
设置默认超时的正确方法是什么
我知道我可以在application.conf中定义akka.test.single expect default
,但这适用于我模块中的所有测试。或者类似的
ActorSystem(.., ConfigFactory.parseString("{akka.test.single-expect-default = 0}"))
在代码中工作,但我希望能够像这样设置此超时
implicit val timeout = Timeout(100 millis)
我已经看过了,但没有被认可
我的测试是
@RunWith(classOf[JUnitRunner])
class MySuite extends path.FunSpec with Matchers {
implicit val system = ActorSystem("MySuite")
val probe = new TestProbe(system)
describe ("timeout") {
println("Waiting..")
probe.expectNoMsg()
println("Waited")
}
}
你想设定吗
akka.test.single-expect-default
在您的配置中,这是不可能的。但是您可以为
TestProbe
创建自己的Decorator,该Decorator可以保存TestProbe
的一个实例,并有一个expectNoMsg()
方法,其中包含一个隐式超时参数。或者您可以在需要时使用def-expectNoMsg(max:FiniteDuration)
并明确指定超时。我同意@SergiyPrydatchenko的观点,即您应该首先尝试使用def-expectNoMsg(max:FiniteDuration)
方法。如果这对您不起作用,那么您可以使用隐式类pimpTestProbe
,以提供您所寻求的行为。事实上,我认为以上应该添加一个拉皮条的代码示例作为答案。@cmbaxterexpectNoMsg(Zero)
是我正在使用的,它工作正常。令人惊讶的是,由于testkit提供了no-argexpectNoMsg()
,我无法自定义超时,除非通过Config
方法。谢谢,但我在文章中提到了为什么这不是理想的。