Может ли шпион-мокито вернуть значение заглушки? - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу протестировать этот класс, поэтому он покажет, что я вызываю ws с правильными параметрами:

class MyService {
  public static boolean sendEmail(MyWebService ws) {
      if (!ws.sendCustomEmail("me@example.com", "Subject", "Body")) {
          throw new RuntimeException("can't do this");
      }
      // ... some more logic which can return false and should be tested
      return true;
  }
}

Есть ли способ объединить mockito spy и thenReturn?Мне нравится, как spy будет отображать фактические вызовы методов, а не просто сообщение об assertionFailed.

@Test
void myTest() {
  MyService spyWs = Mockito.spy(MyWebService.class);

  // code below is not working, but I wonder if there is some library
  verify(spyWs, once())
    .sendCustomEmail(
        eq("me@example.com"), 
        eq("Subject"), 
        eq("here should be another body and test shou")
    )
    .thenReturn(true);

  MyService::sendEmail(spyWs);
}

В результате я хочу получить сообщение об ошибке , показывающее мне разницу между параметрами, которыеожидаемый и фактический, как у обычного шпиона:

Test failed: 
sendCustomEmail(eq("me@example.com"), eq("Subject"), eq("here should be another body and test should show diff")) was never called
sendCustomEmail(eq("me@example.com"), eq("Subject"), eq("Body")) was called, but not expected

Ожидаемый:

  • Я знаю, что могу сделать просто заглушку и затем проверить на исключение, но это не покажет разницу в параметрах

1 Ответ

0 голосов
/ 21 февраля 2019

При использовании Spy используйте синтаксис doReturn().when().Также verify после настройки:

MyService spyWs = Mockito.spy(MyWebService.class);

doReturn(true).when(spyWs).sendCustomEmail(any(), any(), any());

MyService::sendEmail(spyWs);

verify(spyWs, once())
   .sendCustomEmail(
      eq("me@example.com"), 
      eq("Subject"), 
      eq("here should be another body and test shou")
);

// assert that sendMail returned true;

Честно говоря, я не думаю, что вам нужно здесь проверять, достаточно просто логического утверждения, но это ваше дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...