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:
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.
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:
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.
Tags und Links scala akka scalatest akka-testkit