Mam następujący Subscriber
abstrakcyjna klasa podstawowa:Jak mogę przetestować metodę odbioru Abonenta w Akka Cluster?
abstract class Subscriber(topics: Seq[String]) extends Actor with ActorLogging {
import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
val mediator = DistributedPubSub(context.system).mediator
// subscribe to each topic
topics.foreach{mediator ! Subscribe(_, self)}
def receive = {
case SubscribeAck(Subscribe(name, None, `self`)) ⇒
log.info(s"Subscribing to $name")
}
}
I chciałbym przetestować że odbiera wiadomości, które zostały opublikowane w tematach na której podklasą jest zapisany. Niektóre proste pseudokod, który pokazuje, że jest następujący:
val topic = "foo"
class FooSubscriber extends Subscriber(Seq(topic))
val fooSubActor = system.actorOf(Props[FooSubscriber])
val mediator = DistributedPubSub(system).mediator
val msg = "This is a string"
// Publish the msg to the "foo" topic.
mediator ! Publish(topic, msg)
fooSubActor.expectMsg(msg)
Jedynym sposobem, wiem, aby twierdzenia o wiadomości, które otrzymują konkretne aktorów jest w drodze TestProbe
, ale nie wiem, jak mógłbym zrobić TestProbe
przedłużyć moja klasa.
Zazwyczaj Akka docs ma mnóstwo przykładowego kodu z powiązanymi zestawami testów, ale nie mogłem znaleźć niczego w dokumentacji Akka Cluster dotyczącej testowania metody receive
.
Czy ktoś ma sugestie?
Kumulacja polega na zastąpieniu 'receive' i zmianie zmiennej składowej, gdy aktor otrzymuje cokolwiek i sprawdzenie, że zmienna składowa jest ustawiona w moim teście ... ale jest to złe. Poszukuje bardziej idiomatycznego podejścia do testowania. – erip