【问题标题】:Akka: testing actor got messageAkka:测试演员收到消息
【发布时间】:2013-11-29 17:37:41
【问题描述】:

我有下一个代码:

//TestActor got some message  
class TestActor extends Actor {

  def receive = {
    case string: String => //.... 
  }
}
//TestReg when create get ActorRef, when i call `pass` method, then should pass text to ActorRef
class TestReg(val actorRef: ActorRef) {
  def pass(text: String) {
   actorRef ! text
  }
}

当我写测试时:

class TestActorReg extends TestKit(ActorSystem("system")) with ImplicitSender
   with FlatSpecLike with MustMatchers with BeforeAndAfterAll {

   override def afterAll() {
     system.shutdown()
   }

   "actorReg" should "pass text to actorRef" in {
      val probe = TestProbe()

      val testActor = system.actorOf(Props[TestActor])

      probe watch testActor

      val testReg = new TestReg(testActor)
      testReg.pass("test")

      probe.expectMsg("test")
   }
}

我收到错误:

java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for test

如何查看演员收到的文字?

【问题讨论】:

    标签: akka scalatest


    【解决方案1】:

    probe.expectMsg() 正在调用探针上的断言。但是您将 testActor 传递给了您的 TestReg 类

    改成下面这行就可以了

    val testReg = new TestReg(probe.ref) 
    

    必须调用 .ref 才能使探测成为 ActorRef 而且你想在这里做而不是在变量的实例化以避免 超出此回复范围的某些错误

    我看到的逻辑错误是你认为 watch 方法让探针看到测试参与者做了什么。但它的死亡手表不是消息手表。这是不同的。

    【讨论】:

      【解决方案2】:

      用这个创建application.conf 文件:

      akka {
        test {
          timefactor = 1.0    
          filter-leeway = 999s
          single-expect-default = 999s
          default-timeout = 999s
      
          calling-thread-dispatcher {
            type = akka.testkit.CallingThreadDispatcherConfigurator
          }
        }
      
        actor {
          serializers {
            test-message-serializer = "akka.testkit.TestMessageSerializer"
          }
      
          serialization-identifiers {
            "akka.testkit.TestMessageSerializer" = 23
          }
      
          serialization-bindings {
            "akka.testkit.JavaSerializable" = java
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-03-09
        • 2018-09-29
        • 2014-12-02
        • 2015-07-24
        • 1970-01-01
        • 2012-10-09
        • 2015-03-28
        • 2016-02-03
        • 1970-01-01
        相关资源
        最近更新 更多