Programing

mockito에서 doThrow () doAnswer () doNothing () 및 doReturn () 사용법

lottogame 2021. 1. 7. 07:34
반응형

mockito에서 doThrow () doAnswer () doNothing () 및 doReturn () 사용법


나는 mockito를 배우고 있었고 링크 에서 위에서 언급 한 기능의 기본 사용법을 이해했습니다 .

하지만 다른 경우에도 사용할 수 있는지 알고 싶습니다.


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는 해당 메서드가 호출되는 순간 실행되는 Answer 인터페이스를 제공합니다. 이 인터페이스를 사용하면 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에게 아무것도하지 않도록 지시합니다. 때때로 부작용이 없거나 수행중인 단위 테스트와 관련이없는 무효 반환 메서드 또는 메서드에서 사용됩니다.

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

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

아주 간단한 예를 들어 당신이있는 경우이다 UserService가 그 @AutowiredJPA의 resposiroty을UserRepository

...
class UserService{

  @Autowired
  UserRepository userRepository;
...
}

그런 다음 테스트 클래스에서 UserService할 것입니다.

...
class TestUserService{
  @Mock 
  UserRepository userRepository;

  @InjectMocks
  UserService userService;

...
}

@InjectMocks을 프레임 워크 이야기 @Mock UserRepository userRespository;와에 그 주사 userService의 실제 예 배선 그래서보다는 자동차 UserRepository의 모의를 UserRepository주입됩니다 userService.


상호 작용하려는 테스트 이중의 종류에 따라 다릅니다.

  • doNothing을 사용하지 않고 객체 조롱 하면 실제 메서드가 호출되지 않습니다.
  • doNothing을 사용하지 않고 개체 감시 하면 실제 메서드가 호출됩니다.

즉, 조롱을 통해 공동 작업자와의 유일하게 유용한 상호 작용은 귀하가 제공하는 것입니다. 기본적으로 함수는 null을 반환하고 void 메서드는 아무것도 수행하지 않습니다.


논리 클래스를 테스트하고 내부 void 메서드를 호출하는 경우 doNothing은 완벽합니다.

ReferenceURL : https://stackoverflow.com/questions/28836778/usages-of-dothrow-doanswer-donothing-and-doreturn-in-mockito

반응형