>Java >java지도 시간 >Mockito를 사용하여 슈퍼클래스의 특정 메서드 호출을 모의하는 방법은 무엇입니까?

Mockito를 사용하여 슈퍼클래스의 특정 메서드 호출을 모의하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 18:36:30256검색

How to Mock Specific Method Calls in Superclasses with Mockito?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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