2013-11-16 3 views
5

У меня есть следующий код:Akka: тестирование актер получил сообщение

//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 

Как проверить, что актер получил текст?

ответ

4

probe.expectMsg() вызывает утверждение на зонде. Но вы прошли testActor в класс TestReg

изменить его на следующую строку, и она будет работать

val testReg = new TestReg(probe.ref) 

должны вызвать .ref сделать зонд в ActorRef И вы хотите, чтобы сделать это здесь а не при создании переменной, чтобы избежать ошибок ошибок, которые находятся за пределами области действия этого ответа.

ошибка в логике, как я вижу, вы думаете, что метод часов позволяет определить, что делает тестовый актер. но его смерть не наблюдает за часами. который отличается.

Смежные вопросы