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

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

Patricia Arquette
Patricia Arquette원래의
2024-10-31 06:17:02937검색

How to Mock Only a Specific Method Call in a Superclass with Mockito?

Mockito를 사용하여 슈퍼클래스에서 특정 메서드 호출만 모의하기

Mockito를 사용하여 단위 테스트를 수행할 때 특정 메서드 호출만 모의해야 할 수 있습니다. 다른 호출은 영향을 받지 않고 그대로 두고 슈퍼클래스 내의 메서드를 호출합니다. 다음 시나리오를 고려하십시오.

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

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

이 예에서는 다른 save() 메소드 호출의 동작을 유지하면서 ChildService 클래스 내에서 super.save()에 대한 호출만 모의 처리하려고 합니다.

스파이 및 스터빙을 사용한 솔루션

리팩토링이 실행 가능한 솔루션일 수 있지만 항상 가능한 것은 아닙니다. 이러한 경우 감시 및 스터빙 기술을 활용하여 원하는 조롱 동작을 달성할 수 있습니다.

<code class="java">@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>

설명:

  1. ChildService의 인스턴스를 생성합니다. Mockito의 spy() 메소드를 사용하는 클래스입니다. 이렇게 하면 메서드를 선택적으로 모의하는 데 사용할 수 있는 스파이 개체가 생성됩니다.
  2. 모의를 원하지 않는 슈퍼클래스의 메서드를 스텁합니다. 이는 Mockito.doNothing()을 사용하여 수행됩니다. 이 예에서는 슈퍼클래스의 verify() 메서드가 스텁되었습니다.
  3. 스파이 개체에 대한 작업을 수행합니다(이 경우 save() 호출).
  4. 특정 메서드가 스파이 개체에 대한 호출이 이루어졌습니다(이 경우 load()가 확인되었습니다).

스파이 및 스터빙을 사용하면 원하는 모의 동작을 효과적으로 시뮬레이션하여 특정 메서드 호출을 테스트할 수 있습니다. 원래 기능을 유지하면서 슈퍼클래스 내에서.

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

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