2015-05-21 3 views
2

Я тестирую приложение с аккордами Akka. Я использую тестовые зонды. Я хочу проверить, что зонд получает ТОЧНО 10 сообщений одного типа. Одним из решений может быть, чтобы написать 10 раз:Испытательные актеры: получают ровно N сообщений

probe.expectMsg(20 seconds, Done) 

Но я предпочел бы более общее решение (например, я бы проверить мое приложение также при п = 100). Я также попробовал probe.receiveN (10, 20 секунд), но если я получу более 10 элементов, тест не подведет. Вместо этого я хочу, чтобы в этом случае он потерпел неудачу. Есть ли решение?

ответ

3

От Akka Documentation:

expectMsgAllOf[T](d: Duration, obj: T*): Seq[T] 

ряда объектов, соответствующих размеров поставляемого массива объекта должен быть получен в течение данного времени, и для каждого из заданных объектов должны существовать по крайней мере, один из полученных, который равен (по сравнению с ==) его. Полная последовательность полученных объектов - .

Затем используйте expectNoMsg(d: Duration), чтобы убедиться, что требуется точно указанное число.

С код:

val numberOfMessages = 10 
probe.expectMsgAllOf(20 seconds, Array.fill(numberOfMessages)(Done)) 
probe.expectNoMsg(20 seconds) 
+0

Это точно не то, что мне нужно. Я хочу получать ТОЧНО 10 сообщений (не менее, не более). С вашим решением тест терпит неудачу, когда я получаю менее 10 сообщений, но он проходит с> 10 полученными сообщениями. Наконец, я нашел решение: я ставлю probe.expectNoMsg() сразу после вашего ожиданияMsgAllOf(). –

+0

Хорошо, я обновлю свой ответ – Callum

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