Насмешливая функция Scala void с использованием Mockito

Я нашел несколько ответов на этот вопрос, но у меня ничего не работает.

Попытка имитировать метод входа в интерфейс Apache Shiro Subject, который возвращает void.

Интерфейс:

    void login(AuthenticationToken token) throws AuthenticationException;

Я пытался :

   #1
  val subject = mock[Subject]
  doNothing().when(subject).login(new UsernamePasswordToken())

   #2
  val subject = mock[Subject]
  doNothing().when(subject).login(any[UsernamePasswordToken])

   #3
  when(subject.login(any[UsernamePasswordToken])).thenAnswer(new Answer[Void]() {
      override def answer(invocation: InvocationOnMock): Void = {
       null:Void
      }

Я продолжаю получать NullPointerException при входе в систему. Моя цель — протестировать метод входа в систему и протестировать несколько успешных случаев, а также несколько случаев отказа, когда этот метод вызывает исключение.


person Barry    schedule 05.06.2015    source источник
comment
Поведение по умолчанию в Mockito — ничего не возвращать, если вы не заглушите определенный метод. То есть вы пытались удалить всю строку `doDonthing()...?   -  person marios    schedule 06.06.2015
comment
Да, я действительно читал что-то подобное, но если оставить эту строку как mock(subject), это дало бы мне NPE.   -  person Barry    schedule 06.06.2015
comment
Рассмотрим () как [] набрав на моем телефоне   -  person Barry    schedule 06.06.2015
comment
Вы можете воспроизвести это в виде короткого проекта? Я почти уверен, что Mockito по умолчанию заглушает все методы. Это не должно поднимать NPE.   -  person marios    schedule 06.06.2015
comment
Сделаю, также вернусь, и я могу опубликовать больше кода из тестируемого метода и тестового исключения, возможно, я неправильно прочитал   -  person Barry    schedule 06.06.2015
comment
Таким образом, вы были правы, mock[Subject] должен был быть в порядке, потому что Mockito по умолчанию заглушает все методы. Проблема была выше в том, как были настроены тестовые фреймворки/служебные классы этого проекта. Тема, над которой я издевался, была не той, которую скормили запросу. Таким образом, в коде использовался другой конкретизированный субъект, поэтому он переходил к фактической реализации.   -  person Barry    schedule 06.06.2015


Ответы (1)


Поведение по умолчанию в Mockito — ничего не возвращать, если вы не «заглушите» конкретный метод. Нет необходимости заставлять функцию void() выполнять doNothing(), так как по умолчанию она ничего не делает.

person marios    schedule 07.06.2015