2017-10-26 3 views
0

Ich versuche, meinen ersten Akkatest zu schreiben und die Dokumentation durchzugehen. Ich war das erste example davon läuft und folgende Störung zu erhalten:Akkatest TCP-Befehl fehlgeschlagen

[ERROR] [10/26/2017 14:08:55.371] [IngestionWorkerActorSpec-akka.actor.default-dispatcher-4] [akka://IngestionWorkerActorSpec/user/$b] Assertion failed: timeout (3 seconds) during expectMsg while waiting for Test message java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for Test message

Im Folgenden finden Sie die Empfangs Methode meiner Test Schauspieler:

override def receive: Receive = { 
case p: ProducerRecord[_,_] => 
     sendChannel.send(p.value()) 
case _ => logger.error("Unknown type Producer Record Received.") 
} 

Testspec:

val uutActor =system.actorOf(IngestionWorkerActor.props(config, KafkaProducer)) 
"An actor must send " should { 
"send back messages unchanged" in { 
    uutActor ! expected 
    Thread.sleep(50) 
    expectMsg(expected) 
} 
} 

Ich wollte Testen Sie, ob mein Akteur die gesendeten Nachrichten empfängt oder nicht, und später wollte ich ihn ändern, um zu sehen, ob ich eine bestimmte Nachricht erhalte oder nicht. Jede Hilfe wird geschätzt.

Antwort

1

expectMsg(something) bedeutet, dass der Schauspieler mit something zu sender() antworten würde (was durch einen impliziten Parameter zu ! erfasst wurde, wenn Sie die Nachricht gesendet hat), es introspect die Nachrichten nicht der Schauspieler erhält.

Bewährte Methode wäre es zu vermeiden, Versuche zu schreiben, die ins Innere von Akteuren schauen, sondern stattdessen zu überprüfen, dass sie sich verhalten, wenn Nachrichten gesendet werden. In diesem Fall könnte das vielleicht sein, einen Schein sendChannel dort hinein zu stellen und zu verifizieren, dass der richtige Wert darauf gesendet wurde.

Verwandte Themen