2015-11-03 2 views
-1

Вопрос об akka-testkit.Подтвердить одно сообщение, полученное от актера

Может ли кто-нибудь посоветовать, как я могу подтвердить этот актер «А», когда полученное сообщение х, ответил двумя сообщениями - y и z.

Сообщения x, y, z представляют собой разные типы.

Я не вижу подходящей функции «ожидать», которая поддерживала бы такие тесты.

p.s Примеры кода в Scala пожалуйста. Спасибо.

+0

Вы могли бы предоставить фрагмент кода, что вы уже пробовали –

+0

класс A расширяет Актера { Защиту получить { случай х: X => <сделать что-то ..> отправитель! Y() отправитель! Z() .... } } Я использую свойство ImplicitSender, смешанное с моим тестовым классом, чтобы поймать все возвращенные сообщения. Я вижу, что 'expectMsgAllOf [T] (d: Duration, obj: T *): Seq [T]' или 'expectMsgAllClassOf [T] (d: Duration, c: Class [_ <: T] *): Seq [T] ' ожидают сообщения того же типа или супертипа, но в моем случае типы сообщений, которые возвращаются от актера А, различны. –

ответ

2

Фактически вы можете использовать
expectMsgAllClassOf[T](d: Duration, c: Class[_ <: T]*): Seq[T].
Полный пример:

case class X(i:Int) 
case class Y(i:Int) 
case class Z(i:Int) 

class UnderTest extends Actor { 
def receive { 
    case x:X => 
    sender ! Y(1) 
    sender ! Z(1) 
    } 
} 

class MyTest extends AkkaTestKit with ImplicitSender { 

val beingTested = system.actorOf(Props[UnderTest]) 
beingTested ! X(1) 

val receivedMsgs = expectedMsgAllClassOf(classOf[Y],classOf[Z]) 

// Your received messages are in the receivedMsgs sequence first is Y //second is Z 
//you can extract them and validating the exact result with assertions 
}