>Java >java지도 시간 >하위 클래스에서 슈퍼클래스 메서드 호출을 모의하는 방법은 무엇입니까?

하위 클래스에서 슈퍼클래스 메서드 호출을 모의하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-04 05:51:01438검색

How to Mock Superclass Method Invocation in a Child Class?

자식 클래스에서 슈퍼클래스 메서드 호출 모의

단위 테스트에서는 하위 클래스 내에서 메서드 호출을 모의해야 하는 경우가 있습니다. 슈퍼클래스에서는 원래 동작이 그대로 유지됩니다. 이 시나리오는 상위 클래스에 위임하는 메서드를 테스트할 때 발생할 수 있습니다.

다음 예를 고려하세요.

<code class="java">class BaseService {
    public void save() {...}
}

public Childservice extends BaseService {
    public void save(){
        //some code
        super.save();
    }
}</code>

이 경우 테스트에서는 super.save()에 대한 호출만 모의해야 합니다. BaseService 클래스에서 save() 메소드의 원래 동작을 유지하면서 ChildService 메소드에서.

이를 달성하는 한 가지 접근 방식은 Mockito에서 제공하는 스파이 기능을 사용하는 것입니다. ChildService 인스턴스를 감시함으로써 BaseService 인스턴스에 액세스할 수 있으므로 메서드 호출을 세밀하게 제어할 수 있습니다.

<code class="java">class BaseService {

    public void validate(){
        fail(" I must not be called");
    }

    public void save(){
        //Save method of super will still be called.
        validate();
    }
}

class ChildService extends BaseService{

    public void load(){}

    public void save(){
        super.save();
        load();
    }
}

@Test
public void testSave() {
    ChildService classToTest = Mockito.spy(new ChildService());

    // Prevent/stub logic in super.save()
    Mockito.doNothing().when((BaseService)classToTest).validate();

    // When
    classToTest.save();

    // Then
    verify(classToTest).load();
}</code>

BaseService 클래스의 유효성 검사() 메서드를 모의하여 테스트에서는 다음을 보장합니다. super.save()의 원래 논리는 실행되지 않습니다. 또한 ChildService 클래스의 load() 메서드를 스텁하면 해당 메서드가 예상대로 호출되는지 확인됩니다. 이 접근 방식을 사용하면 메소드 호출을 세밀하게 제어할 수 있으며 테스트 중에 특정 기능을 격리할 수 있습니다.

위 내용은 하위 클래스에서 슈퍼클래스 메서드 호출을 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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