Quando ho un attore genitore in Akka, che crea direttamente un attore figlio all'inizializzazione, quando voglio scrivere test unitari per l'attore genitore, come posso sostituire l'attore bambino con un TestProbe o un mock?Come schernire i bambini attori per testare un sistema Akka?
Ad esempio, con il seguente codice di esempio artificiosa:
class TopActor extends Actor {
val anotherActor = context.actorOf(AnotherActor.props, "anotherActor")
override def receive: Receive = {
case "call another actor" => anotherActor ! "hello"
}
}
class AnotherActor extends Actor {
override def recieve: Receive = {
case "hello" => // do some stuff
}
}
Se voglio scrivere un test per TopActor, per controllare il messaggio inviato a AnotherActor è "ciao", come faccio a sostituire l'attuazione di AnotherActor? Sembra che TopActor crei direttamente questo figlio, quindi non è facile accedervi.
Poiché non c'è altra risposta a questa soluzione e ho avuto un upvote, mi sa che sarà accetta la mia risposta :) –
Il tuo 'testTopActor.underlyingActor' ha sia un' anotherActor' che 'TopActor.anotherActor'. Può essere OK se il tuo 'anotherActor' non sta facendo nulla nel suo costruttore o in qualsiasi funzione del ciclo di vita, ma se ci fosse qualcosa in esecuzione, ad es.connessione di rete/database nel costruttore (so che è brutto, ma solo per illustrare il punto), allora avrai 2 operazioni di questo tipo in esecuzione quando crei il tuo 'testTopActor'. Forse è bene stare attenti a questa cosa. – CrazyGreenHand