Насмешка над способом, который вызывается несколько раз в java - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу протестировать один метод, который вызывает другой метод несколько раз.

Class Sample{
    OtherClass otherClass;
    public OutputPoJo callABCMultipleTImes(){
        OutputPoJo outputPojo;
        try{
            outputPojo = otherClass.callABC();
        } catch(RuntimeException ex){
           //Retrying call one more time
           outputPojo = otherClass.callABC();
        }
        return outputPojo;
    }
}

Я хочу проверить этот метод. Для этого я делаю что-то вроде этого, и это отлично работает для меня для разных комбинаций.

public void testCallABCMultipleTImes(){
   when(otherClass.callABC())
   .thenThrow(new RuntimeException("First try failed.")).
   .thenReturn(new OutputPOJO());
   mockedSampleClass.callABCMultipleTImes();
   Mockito.verify(otherClass,Mockito.times(2)).callABC();
}

По сути, я проверяю, что я получил исключение в первый раз и во второй раз, я получил успешный ответ. Я проверяю это, проверяя, что метод вызывается дважды.

Это правильный способ проверки такого сценария или есть какой-то другой способ?

Спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Вы должны проверить, что ваш метод имеет правильное поведение, то есть, что он возвращает значение, которое вы ожидаете получить:

public void testCallABCMultipleTImes(){
   OutputPOJO value  = new OutputPOJO();
   when(otherClass.callABC())
     .thenThrow(new RuntimeException("First try failed."))
     .thenReturn(value);
   assertEquals(value, mockedSampleClass.callABCMultipleTImes());
}

Теоретически нет необходимости вызывать verify, потому что тот факт, что ваш метод вернул правильное значение, доказывает, что он поступил правильно.

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