Подтвердить что ты не робот

Использование doThrow() doAnswer() doNothing() и doReturn() в mockito

Я изучал mockito, и я понял основные применения вышеупомянутых функций из ссылки .

Но я хотел бы знать, можно ли его использовать для любых других случаев?

4b9b3361

Ответ 1

doThrow: в основном используется, когда вы хотите выбросить исключение, когда метод вызывается в макетном объекте.

public void validateEntity(final Object object){}
Mockito.doThrow(IllegalArgumentException.class)
.when(validationService).validateEntity(Matchers.any(AnyObjectClass.class));

doReturn: используется, когда вы хотите отправить обратно возвращаемое значение при выполнении метода.

public Socket getCosmosSocket() throws IOException {}
Mockito.doReturn(cosmosSocket).when(cosmosServiceImpl).getCosmosSocket();

doAnswer. Иногда вам нужно выполнить некоторые действия с аргументами, передаваемыми методу, например, добавить некоторые значения, выполнить некоторые вычисления или даже изменить их. doAnswer дает вам интерфейс ответа, который выполняемый в тот момент, когда этот метод вызывается, этот интерфейс позволяет вам взаимодействовать с параметрами с помощью аргумента InvocationOnMock. Кроме того, возвращаемое значение метода ответа будет возвратным значением метода издевательства.

public ReturnValueObject quickChange(Object1 object);
Mockito.doAnswer(new Answer<ReturnValueObject>() {

        @Override
        public ReturnValueObject answer(final InvocationOnMock invocation) throws Throwable {

            final Object1 originalArgument = (invocation.getArguments())[0];
            final ReturnValueObject returnedValue = new ReturnValueObject();
            returnedValue.setCost(new Cost());

            return returnedValue ;
        }
}).when(priceChangeRequestService).quickCharge(Matchers.any(Object1.class));

doNothing: самый простой из списка, в основном он говорит Mockito ничего не делать, когда вызывается метод в макет-объекте. Иногда используется в методах или методах void return, которые не имеют побочных эффектов или не связаны с тестированием устройства, которое вы выполняете.

public void updateRequestActionAndApproval(final List<Object1> cmItems);

Mockito.doNothing().when(pagLogService).updateRequestActionAndApproval(
                Matchers.any(Object1.class));

Ответ 2

Если вы тестируете логический класс и вызываете некоторые внутренние методы void, doNothing совершенен.

Ответ 3

Это зависит от типа тестового двойника, с которым вы хотите взаимодействовать:

  • Если вы не используете doNothing и вы mock объект, реальный метод не называется
  • Если вы не используете doNothing и spy объект, реальный метод называется

Другими словами, с издевательством единственные полезные взаимодействия с сотрудником - это те, которые вы предоставляете. По умолчанию функции возвращают null, void-методы ничего не делают.