Mockito высмеивает вызов функции в операторе if - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь смоделировать вызов функции для внешнего API, который живет в операторе if.Я не могу вернуть значение, которое у меня есть в .thenReturn, и я не уверен, почему.Я искал ответы на это на SO, но я не могу найти ничего, что отвечает на мой вопрос.Большое спасибо за ваше время!

Вот мой класс, который я тестирую:

@Service
public class TwilioVerifyService {

    public String requestCode(String phoneNumber, String countryCode, String via) throws AuthyException
    {
        AuthyApiClient authyApiClient = new AuthyApiClient("<apiClient>");

        Params params = new Params();
        params.setAttribute("code_length", "6");
        Verification verification = authyApiClient
            .getPhoneVerification()
            .start(phoneNumber, countryCode, via, params);
        if (verification.isOk())
        {
            return "{ \"success\": \"Successfully sent verification code.\" }";
        }
        return "{ \"error\": \"Error sending code.\" }";
    }
}

А вот мой тест:

@RunWith(MockitoJUnitRunner.class)
public class TwilioVerifyServiceTests {

    @InjectMocks
    TwilioVerifyService twilioVerifyService;

    @Mock
    Verification verification;

    @Test
    public void requestCodeTest_success() throws AuthyException
    {
        String phoneNumber = "1111111111";
        String countryCode = "1";
        String via = "1";
        when(verification.isOk()).thenReturn(true);

        String result = twilioVerifyService.requestCode(phoneNumber, countryCode, via);
        System.out.println(result);
    }
}

Я верю, что я(или хотите быть) насмешливым verification.isOk(), чтобы вернуть true независимо от входных данных, но, похоже, возвращает ложь, предоставляя "{ "error": "Error sending code." }" вместо "{ \"success\": \"Successfully sent verification code.\" }".

Еще раз спасибо за ваше время!

1 Ответ

0 голосов
/ 06 декабря 2018

Проверка генерируется из вызова методов в AuthyApiClient.

В идеале AuthyApiClient не должен создаваться в вашем сервисе, а должен вводиться в него вызывающей стороной.

private AuthyApiClient authyApiClient;
@Autowired
public TwilioVerifyService(AuthyApiClient authyApiClient) {
  this.authyApiClient = authyApiClient;
}

Затем вы можете смоделировать authyApiClient и передать его тестируемому классу: TwilioVerifyService twilioVerifyService = new TwilioVerifyService (mockAuthyApiClient);

Это дает вам больший контроль над тестируемым классом иудаляет зависимость, которая у него есть в данный момент, от конструктора AuthyApiClient.

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