scala akka scalatest

scala - Actores de prueba en Akka



scalatest (3)

Cuando ejecuto un ejemplo básico para probar actores:

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpec with MustMatchers with BeforeAndAfterAll {

Me equivoque

class WordSpec needs to be a trait to be mixed in

¿Qué estoy haciendo mal?


A partir de Scalatest 2.0, las especificaciones que se mezclan ahora son clases, no rasgos. Lo que significa que no puedes usarlos con el kit de prueba de Akka ... ambas son clases y solo puedes extender una de ellas.

Cambiar a scalatest 1.9.1. Todavía es compatible con ellos y es la última versión que se lanzó antes de que hicieran ese cambio y rompieran cosas para los usuarios de akka. En 1.9.1, las especificaciones siguen siendo rasgos.


Además de lo que propuso 1esha, hay una solución más en la documentación de akka

Si por alguna razón es un problema heredar de TestKit debido a que es una clase concreta en lugar de un rasgo, existe TestKitBase:

import akka.testkit.TestKitBase class MyTest extends TestKitBase { implicit lazy val system = ActorSystem() // put your test code here ... shutdown(system) }

El sistema implícito de valores perezosos se debe declarar exactamente así (por supuesto, puede pasar argumentos a la fábrica del sistema actor, según sea necesario) porque el rasgo TestKitBase necesita el sistema durante su construcción.


En ScalaTest 2.0 puede encontrar tanto clase como rasgo para WordSpec . La clase denominada WordSpec y rasgo es WordSpecLike . Entonces solo use WordSpecLike lugar de WordSpec :

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with MustMatchers with BeforeAndAfterAll {