2016-12-13 3 views
0

У меня есть актер, который получает карту в сообщении. Я хотел бы проверить компоненты этой карты.Извлечь карту из сообщения, полученного от актера

Посмотрев здесь Pattern matching on testing expected message, я сделал это:

testReceiver.expectMsgPF() match { 
     case SomeMessage(answer) => { 
     assert(answer.keys.size == 1) 
     assert(answer.keys.head == "appId") 
     } 
     case _ => Failed 
    } 

Однако, я получил этот вопрос:

[error] You can make this conversion explicit by writing `expectMsgPF _` or `expectMsgPF(_,_)(_)` instead of `expectMsgPF`. 
[error]  testReceiver.expectMsgPF() match { 
[error]       ^

После этого я изменил первую строку:

testReceiver.expectMsgPF _ match { 

После этого на второй линии я получаю:

constructor cannot be instantiated to expected type; 
[error] found : my.package.SomeMessage 
[error] required: (String, String) => PartialFunction[Any,Nothing] => Nothing 

Я думаю, что я не подхожу к этому правильно.

Как я могу извлечь карту из сообщения, а затем проверить его свойства?

ответ

1

Этот кудрявый блок на самом деле является PartialFunction, который вы передаете как второй параметр pf expectMsgPF. Поэтому нет match.

testReceiver.expectMsgPF() { 
     case SomeMessage(answer) => { 
     assert(answer.keys.size == 1) 
     assert(answer.keys.head == "appId") 
     } 
     case _ => Failed 
    } 
1

Вы указали срок? Смотрите описание expectMsgPF метод от http://doc.akka.io/docs/akka/current/scala/testing.html:

expectMsgPF [Т] (д: Продолжительность) (пф: частично определённая функция [Любое, Т]): T

В определенный период времени, сообщение должно быть принято, и для этого сообщения должна быть определена данная часть ; результат от применения возвращается частичная функция к полученному сообщению. Продолжительность может быть оставлена ​​неуказанной (в этом случае должны быть пустые круглые скобки) использовать крайний срок от самого внутреннего, заключенного внутри блока, вместо.

Попробуйте вложить свой код в within блоке:

within(1000.millis) { 
    testReceiver.expectMsgPF() match { 
     case SomeMessage(answer) => { 
     assert(answer.keys.size == 1) 
     assert(answer.keys.head == "appId") 
     } 
     case _ => Failed 
    } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^