Tout d'abord, je ne demande pas comment tester un Akka Acteur. Je connais les techniques pour le faire. Mon problème est légèrement différent.Composants de test unitaire qui utilise un acteur Akka
Je développe un programme Scala, appelons le client
, qui n'utilise pas Akka Actors. Cependant, le programme utilise une librairie, appelons le server
, dont l'interface est implémentée à l'aide d'un Akka Actor.
Puis, à travers le demander modèle, le client
interagit avec le server
.
// This is the client program
class Client(uri: String) {
implicit val context: ActorSystem = ActorSystem("client-actor-system")
private val mainActor = context.actorSelection(uri)
def connect: Future[SomeClass] = {
implicit val timeout: Timeout = Timeout(5 seconds)
(mainActor ? Connect()).mapTo[CreationResponse]
}
}
Maintenant, je veux écrire des tests unitaires pour Client
classe. Les tests unitaires permettent de tester une classe isolément. Toute dépendance externe doit être ridiculisée.
Comment puis-je me moquer de la référence à mainActor
à l'intérieur de la classe Client
? Comment puis-je injecter dans le système d'acteur un acteur simulé pour mainActor
?
Merci d'avance.
Je suppose que votre approche est la bonne et une seule. La seule chose que je n'aime pas c'est que l'utilisation d'Akka n'est plus cachée dans la classe 'Client'. –
une alternative est de créer une méthode d'usine qui construit votre acteur, et dans le test, vous l'écrasez pour retourner 'probe.ref' –