Как я могу проверить метод получения подписчика в кластере 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 как часть вашего тестового устройства.

Другие вопросы по тегам