2015-03-09 8 views
0

Я пытаюсь проверить, вызван ли регистратор. Проблема в том, что он возвращает void, поэтому рекомендуется использовать шпион вместо заглушки. К сожалению, шпион действует фанки (не работает). В идеале, я также хотел бы удалить «msg» и использовать совпадение.Издевательская функция void в Scala с Mockito?

Код приведен ниже. Я также пробовал подход, заданный https://stackoverflow.com/a/24150445/555493, и я до сих пор получаю аналогичную ошибку.

//setup spy 
val logger = spy(new Logger) 
logger.debug(msg) 

//call code 

//verify 
there was one(logger).debug(msg) 

Я получаю эту ошибку:

The mock was not called as expected: 
Argument(s) are different! Wanted: 
logger.debug(
($anonfun$apply$mcV$sp$1) <function0> 
); 
-> at HttpHealthCheckSpec$$anonfun$35$$anon$11$$anonfun$11.apply$mcV$sp(HttpHealthCheckSpec.scala:176) 
Actual invocation has different arguments: 
logger.debug(
($anonfun$setupMock$1) <function0> 
); 
-> at HttpHealthCheckSpec.setupMock(HttpHealthCheckSpec.scala:58) 

ответ

0

кажется, что проблема в том, что регистратор принимает строку, которая является аргументом вызова по имени. Согласно https://stackoverflow.com/a/2158709/555493, решение довольно уродливое. К сожалению, Мокито не может издеваться над Струнами. Итак, еще одно решение - использовать specs2, где Mockito был исправлен, чтобы правильно совпадать с аргументами по имени.