我有以下演员:
class SomeActor extends Actor with ActorLogging {
override def receive: Receive = {
case StartMessage =>
//check if the job is still running
val address = url("http://mywebsite.com")
val status: Future[String] = Await.ready(Http(address OK as.String), 1 second)
val now = Calendar.getInstance().getTime()
println("TIME NOW: " + now)
status onComplete {
case Success(message) => sender ! SomeMessage(message)
case Failure(_) => {
val then = Calendar.getInstance().getTime()
sender ! SomeMessage("Not running")
println("TIME THEN: " + then)
}
}
我正在测试它:
it should "check the id of a submitted job" in new Scope {
myActorRef ! StartMessage
expectMsg(SomeMessage("Not running"))
}
问题是我得到了
java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for SomeMessage(Not running)
所以看来我未来的时间已经过去了,因为我只等了1秒就不应该这样。
然而,这也是印刷的。
TIME NOW: Tue Dec 06 13:39:13 GMT 2016
TIME THEN: Tue Dec 06 13:39:13 GMT 2016
由此看来,启动后未来会立即失败。
那是哪个?
答案 0 :(得分:0)
我遇到了“关闭发件人”的问题,这里有很好的解释:
http://helenaedelson.com/?p=879
基本上,我在另一个帖子中回复sender
,因此sender
对象可能与主线程中的对象不同。
我只需要在开头添加:
val requestor = sender
并改为:
requestor ! SomeMessage(message)
和
requestor ! SomeMessage("Not running")