Издевательство над функцией void в Scala с помощью Mockito?

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

Код ниже. Я также пробовал подход, указанный 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)

person U Avalos    schedule 09.03.2015    source источник


Ответы (1)


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

person U Avalos    schedule 09.03.2015