Ich habe versucht, einen Spock-Test für eine Klasse zu machen, wo ich überprüfen muss, ob er eine Nachricht an den Akteur sendet (sagen wir statActor
). Ich weiß, dass Akka eine spezielle Bibliothek für den Integrationstest hat, aber scheint, dass es für einen sehr einfachen Test zu viel ist. Also, ich habe versucht:Spock Mocks für Akka's ActorRef
setup:
def myActor = Mock(ActorRef)
myService.statActor = myActor
when:
myService.startStats()
then:
1 * myActor.tell(_)
Ziel Methode wie folgt aussieht:
void startStats() {
Date x = null
// prepare some data, fill x with required value
this.statActor.tell(x)
}
Ich dachte, dass Spock Mock mit einer Methode tell
schaffen. Aber nach diesen Test ausführen ich erhalte:
java.lang.ClassCastException: akka.actor.ActorRef$$EnhancerByCGLIB$$80b97938 cannot be cast to akka.actor.ScalaActorRef
at akka.actor.ActorRef.tell(ActorRef.scala:95)
at com.example.MyService.startStats(MyService.groovy:32)
Warum es echte ActorRef
Implementierung nennen? Irgendeine Art von Inkompatibilität mit Scala? Gibt es eine Möglichkeit, eine solche Klasse nachzuahmen?
"aber scheint, dass es zu viel für sehr einfachen Test ist" <- darf ich fragen, wie diese Schlussfolgerung gemacht wird, besonders in Anbetracht der Tatsache, dass das Spott, das Sie versucht haben, nicht geklappt hat? –
@ViktorKlang weil eine Zeile 'def actor = Mock (ActorRef)' weniger als ein paar Dutzend Zeilen für 'testkit' benötigt. Ich meine, es kann für andere Objekte mock machen, funktioniert gut und wirklich einfach zu bedienen –
@paradigmatic ja, ich weiß. wahrscheinlich stelle ich harte Fragen, aber was kann ich hier machen? :( –