>Java >java지도 시간 >부분적 모의를 위해 Mockito에서 어떻게 선택적으로 모의 메서드를 사용할 수 있습니까?

부분적 모의를 위해 Mockito에서 어떻게 선택적으로 모의 메서드를 사용할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-20 20:11:10921검색

How Can I Selectively Mock Methods in Mockito for Partial Mocking?

선택적 메서드 모의에 Mockito 사용

Mockito는 클래스 내에서 특정 메서드를 모의하는 유연성을 제공합니다. 부분 모의를 활용함으로써 개발자는 다른 메서드는 그대로 유지하면서 재정의할 메서드를 선택할 수 있습니다.

예를 들어 getPrice(), Stock 클래스를 생각해 보세요. >getQuantity()getValue(). 반환 값에 대해 처음 두 메서드를 모의하고 싶을 수도 있지만 getValue()가 원래 동작을 유지하도록 하세요.

Mockito에서 부분 모의를 사용하면 이 정밀도를 얻을 수 있습니다.

Stock 객체는 모의 개체로 인스턴스화되는 반면 getPrice()getQuantity()에 대한 특정 기대치가 설정됩니다. 예는 다음과 같습니다.

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);

getValue()에 대해 thenCallRealMethod()를 호출하면 실제 구현이 유지됩니다.

when(stock.getValue()).thenCallRealMethod();
또는 스파이가 될 수 있습니다. 여기서 모든 메소드는 초기에 실제 구현을 참조합니다. 명시적으로 스텁된 메서드만 변경된 동작을 채택합니다. 스파이 접근 방식은 다음과 같습니다.

Stock stock = spy(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
스파이를 사용할 때는 스텁된 메서드 내에서 실제 메서드를 호출하지 않는 것이 중요합니다.

또 다른 옵션에는 Mockito.CALLS_REAL_METHODS 플래그가 포함됩니다.

Stock MOCK_STOCK = Mockito.mock( Stock.class, CALLS_REAL_METHODS );
이 접근 방식은 스텁되지 않은 메서드를 실제 메서드에 위임합니다.

그러나 주어진 Stock 예에서

price 모두에 대한 getValue()의 종속성으로 인해 이 부분적 모의 전략은 여전히 ​​실패할 수 있습니다. 수량 게터에만 국한되지 않고 직접적으로.

또한 다음과 같은 경우 모의 객체를 완전히 피하는 것을 고려하세요. 가능:

위 내용은 부분적 모의를 위해 Mockito에서 어떻게 선택적으로 모의 메서드를 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.