Mockito를 사용하여 슈퍼클래스의 특정 메서드 호출 모의
테스트 시나리오에서는 슈퍼클래스의 특정 메서드 호출만 모의하는 것이 필요할 수 있습니다. 다른 사람의 원래 행동을 보존합니다. 이는 Mockito의 유연한 모의 기능을 사용하여 달성할 수 있습니다.
다음 클래스 계층 구조를 고려하십시오.
<code class="java">class BaseService { public void save() {...} } class ChildService extends BaseService { public void save() { // Custom logic super.save(); } }</code>
이 예에서는 ChildService의 super.save() 호출만 모의 처리하려고 합니다. BaseService에서 save()의 원래 구현이 실행되도록 허용합니다.
이를 달성하기 위해 스파이 기능을 사용하여 ChildService의 프록시를 생성할 수 있습니다.
<code class="java">ChildService classToTest = Mockito.spy(new ChildService());</code>
다음으로 ChildService의 컨텍스트 내에서 super.save()의 동작을 스텁해야 합니다. 그러나 super는 ChildService 내의 BaseService 클래스를 참조하므로 Mockito.doNothing()을 사용하기 전에 classToTest를 BaseService로 캐스팅해야 합니다.
<code class="java">Mockito.doNothing().when((BaseService)classToTest).validate();</code>
BaseService의 verify() 메서드를 스텁하여 효과적으로 방지합니다. 테스트 중에 호출되지 않습니다. 결과적으로 ChildService의 super.save() 호출만 모의 개체에 의해 차단됩니다.
테스트를 완료하려면 이제 classToTest에서 save()를 호출하고 ChildService에서 예상되는 로직이 실행되는지 확인할 수 있습니다.
<code class="java">classToTest.save(); verify(classToTest).load();</code>
이 접근 방식을 사용하면 상속된 메서드의 기능을 유지하면서 슈퍼클래스의 특정 메서드 호출을 선택적으로 모의할 수 있습니다. 클래스 계층 구조를 수정하거나 코드를 리팩토링하는 것이 불가능한 상황에서 가치가 있음이 입증되었습니다.
위 내용은 Mockito를 사용하여 슈퍼클래스의 특정 메서드 호출을 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!