Как я могу проверить метод получения подписчика в кластере Akka?
У меня есть следующее 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
метод.
У кого-нибудь есть предложения?
1 ответ
Это пример из учебника, где внедрение зависимостей помогает в тестировании.
Если вы получите посредник для DistPubSub в конструкторе подписчика, вместо того, чтобы напрямую запросить его, вы можете просто протестировать актер Suscriber отдельно, без необходимости использовать DistPubSub как часть вашего тестового устройства.