He intentado hacer una prueba de Spock para una clase, donde tengo que verificar que envíe un mensaje al actor (por ejemplo, statActor
). Sé que Akka tiene una biblioteca especial para la prueba de integración, pero parece que es demasiado para una prueba muy simple. Por lo tanto, he intentado:Spock se burla de Akka's ActorRef
setup:
def myActor = Mock(ActorRef)
myService.statActor = myActor
when:
myService.startStats()
then:
1 * myActor.tell(_)
método de destino se parece a:
void startStats() {
Date x = null
// prepare some data, fill x with required value
this.statActor.tell(x)
}
pensé que Spock creará maqueta con un método tell
. Sin embargo, después de ejecutar esta prueba estoy consiguiendo:
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)
Por qué se llama verdadera ActorRef
aplicación? Algún tipo de incompatibilidad con Scala? ¿Hay alguna forma de burlarse de esa clase?
"pero parece que es demasiado para una prueba muy simple" <- ¿puedo preguntar cómo se hace esta conclusión, especialmente teniendo en cuenta que la burla que probó no funcionó? –
@ViktorKlang porque una línea 'def actor = Mock (ActorRef)' es menos que unas pocas docenas de líneas requeridas para 'testkit'. Quiero decir que puede hacer burla de otros objetos, funciona bien y es realmente fácil de usar –
@paradigmatic sí, lo sé. probablemente estoy haciendo preguntas difíciles, pero ¿qué puedo hacer aquí? :( –