Wie teste ich einen Akka-Darsteller, der eine Nachricht an einen anderen Schauspieler sendet?

8

Ich benutze ScalaTest mit dem Akka TestKit, um Einheits- und Integrationstests für einen Akteur zu schreiben, den ich codiert habe, um einfach eine Nachricht an einen anderen Akteur zu senden, ohne einen internen Zustand zu verändern. Nimm das zum Beispiel:

%Vor%

Ich möchte einen Test schreiben, der bestätigt, dass anotherActor processed AnotherMessage als Folge von MyActor processing MyMessage . Das klassische Beispiel besteht darin, TestActorRef zu verwenden, um den zugrunde liegenden Akteur zu erhalten und nach einem internen Zustand zu suchen, der bei Empfang der Nachricht wie folgt betroffen sein sollte:

%Vor%

Aber in meinem Fall ist mir ein solcher Zustand egal. Tatsächlich möchte ich vermeiden, einen solchen Staat zu halten. TestProbe war nicht ganz das, wonach ich gesucht habe, da Sie immer noch eine TestProbe.ref mit dem zu testenden Akteur registrieren müssen. Zum größten Teil habe ich alle Beispiele in der Akka-Dokumentation zum Testen ( Ссылка <) gelesen / a>) aber nichts passendes gefunden haben.

    
nmurthy 26.03.2015, 02:20
quelle

1 Antwort

14

Es gibt wahrscheinlich ein paar Möglichkeiten, dies zu tun, ich werde Ihnen eines zeigen, das funktioniert, wenn wir etwas Ähnliches zum Testen haben. Ich denke immer noch TestActorRef , TestKit und TestProbe sind der Weg zu gehen. In Anbetracht der folgenden Struktur:

%Vor%

Das Problem ist, dass Sie eine Akteurinstanz haben, die einen Kinddarsteller erstellt, und als Teil Ihres Tests müssen Sie sicherstellen, dass das Kind eine Nachricht erhält, obwohl Sie in Ihrem Test keine Kontrolle über die Erstellung dieses Kindes haben . Wenn wir diese Situation haben, tun wir etwas Einfaches wie das Folgende (mit specs2 gemacht, aber in der Lage sein, etwas Ähnliches in ScalaTest zu erstellen):

%Vor%

Der Schlüssel besteht darin, dass ich beim Erstellen des zu testenden Aktors die Methode überschreibe, die das Kind erstellt, um meine Probe zu liefern. Es ist grob, aber auch einfach und effektiv.

    
cmbaxter 26.03.2015, 14:01
quelle

Tags und Links