2013-06-05 3 views
19

Die Akka Testing docs geben die folgende Art und Weise eine TestActorRef zu erstellen:Wie erstelle ich ein TestActorRef in Scala für einen Actor mit Konstruktorparametern?

 
import akka.testkit.TestActorRef 

val actorRef = TestActorRef[MyActor] 

Wie erweitere ich das einen vorhandenen Akteur für die Prüfung, die Konstruktorargumente nimmt? Wenn ich das so ist zu versuchen, ausgeführt wird, in meine Schauspieler-Klasse ersetzt wird, erhalte ich folgende Fehlermeldung:

„Fehler beim Schauspieler akka.actor.ActorInitializationException zu schaffen: Es konnte kein Schauspieler
instanziiert Vergewissern Sie ist Schauspieler innen eine nicht definiert Klasse/Merkmal,
Wenn ja, setzen Sie es außerhalb der Klasse/Eigenschaft, zB in einem Begleitobjekt,
ODER versuchen Sie zu ändern: 'actorOf (Props [MyActor]' zu 'actorOf (Props (neue MyActor)'). "

Die verschiedenen Ideen, die ich mir vorstellen konnte, um die Argumente nach dem Klassennamen in die eckigen Klammern einzufügen, stürzten und brannten auch .

Antwort

24

könnten Sie Props wie folgt verwenden:

val actorRef = TestActorRef(Props(new MyActor(param1, param2))) 

oder Factory-Methode wie folgt aus:

val actorRef = TestActorRef(new MyActor(param1, param2)) 

Siehe apply Methoden im Objekt TestActorRef.

+2

Danke, das macht den Trick. Ich fügte eine type Deklaration zum val hinzu: 'val actorRef: TestActorRef [MyActor] = TestActorRef (Props (neuer MyActor (param1, param2))) und ich bin jetzt in der Lage, sauber darauf zuzugreifen. – David

+0

Dies scheint nicht mehr zu funktionieren. Oder zumindest funktioniert das nicht für einen Schauspieler, der in einer Testklasse deklariert wurde. – davidrpugh

+0

@davidrpugh: es funktioniert gut für mich [siehe diese] (http://pastebin.com/zxFHKTj0) – senia

Verwandte Themen