首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回复发件人进入死信箱

回复发件人进入死信箱
EN

Stack Overflow用户
提问于 2016-12-15 19:17:23
回答 1查看 376关注 0票数 1

我有以下单元测试:

代码语言:javascript
复制
  it should "return xml" in new TestScope {
    val testProbe: TestProbe = TestProbe()
    val someActor = system.actorOf(Props[SomeActor])

    testProbe.send(someActor, MakeXmlApiCall())
    testProbe.expectMsgPF() {
      case Success(message) => {
        assert(message == "someMessage")
      }
    }
  }

对于使用此receive方法的参与者:

代码语言:javascript
复制
  override def receive: Receive = {
    case MakeXmlApiCall() => {
      val status =  Future {"someMessage"}

      println("In SomeActor")

      status onComplete {
        case Success(message) => {
          sender ! message
        }
      }

    }
  }

"In SomeActor“被打印出来,这意味着控件到达receive方法。

然而,我也收到了这样的信息:

代码语言:javascript
复制
[INFO] [12/15/2016 18:42:29.463] [testSystem-akka.actor.default-dispatcher-3] [akka://testSystem/deadLetters] Message [java.lang.String] from Actor[akka://testSystem/user/$a#-1159394947] to Actor[akka://testSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.

那么,为什么从单元测试发送给dead-letter而不是testProbe的消息。

为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 20:30:47

从将来的回调或运算符引用sender() (或任何参与者状态)是不安全的,因为sender()可能已经更改。

相反,您应该使用管道将未来传输回发件人:status.pipeTo(sender())

此外,您的expectMsgPF()调用与实际从SomeActor发送的内容不匹配。您使用的是字符串,而不是Success的实例。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41171738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档