Я пишу тестовый пример для приложения на основе актера. Один из компонентов можно приблизительно определить следующим образом:
class MyActor(a: ActorRef, b: ActorRef) extends Actor {
override def receive: Receive = {
case _ =>
a ! "Got message!"
b ! "Hello!"
}
}
теперь, чтобы написать тестовый пример, я использую akka-testkit
и TestProbe
. Важная часть тестового примера выглядит следующим образом:
val a = TestProbe()
val b = TestProbe()
val c = system.actorOf(Props(new MyActor(a.testActor, b.testActor)))
c ! "Message!"
a.expectMsg("Got message!")
Теперь проблема в том, что тестовый пример проходит успешно, даже несмотря на то, что сообщение, отправленное b
, не ожидалось и, следовательно, не было проверено.
Я знаю, что я могу вызвать b.expectNoMsg()
в начале тестового случая, который позаботится об этой конкретной проблеме, но почему-то я считаю, что это не совсем масштабируемый подход (мне пришлось бы добавлять его каждый раз после всех ожидаемых вызовов, что довольно громоздко).
Итак, мой вопрос: есть ли возможность запускать akka-testkit
в строгом режиме, чтобы каждое сообщение приходилось как-то ожидать? Предпочтительным способом является конфигурация TestKit
, ActorSystem
или TestProbe
, но подойдет любое решение, которое не требует изменения каждого тестового примера (поэтому вызов expectNoMsg()
в конце каждого сообщения не является решением).