У меня есть следующий абстрактный базовый класс Subscriber
:
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")
}
}
И я хотел бы проверить, что он получает сообщения, опубликованные в темах, на которые подписан подкласс. Некоторый простой псевдокод, демонстрирующий это, выглядит следующим образом:
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)
Единственный известный мне способ делать утверждения о сообщениях, которые получают определенные акторы, — это TestProbe
, но я не знаю, как сделать так, чтобы TestProbe
расширял мой класс.
Как правило, в документах Akka много примера кода с соответствующими наборами тестов, но я не смог найти ничего в документации Akka Cluster, связанной с тестированием метода receive
.
У кого-нибудь есть предложения?
receive
и изменить переменную-член, когда актор что-либо получает, и сделать утверждение, что переменная-член установлена в моем тесте... но это плохо. Ищем более идиоматический подход к тестированию. - person erip   schedule 04.01.2017