> Java > java지도 시간 > Mockito Spy : 동일한 클래스 예제에서 메소드 조롱

Mockito Spy : 동일한 클래스 예제에서 메소드 조롱

Robert Michael Kim
풀어 주다: 2025-03-07 18:05:45
원래의
571명이 탐색했습니다.
mockito spy : 동일한 클래스 예제에서 메소드를 조롱하는

이 예제는 Mockito의

기능을 사용하여 클래스 내에서 특정 방법을 조롱하는 방법을 보여줍니다. : spy MyClass라는 클래스가 있다고 가정 해 봅시다.

메소드를 테스트하고 싶지만 결과가 의 영향을 받기를 원하지 않습니다. 우리는 스파이를 사용하여
public class MyClass {
    public int add(int a, int b) {
        return a + b + internalMethod();
    }

    private int internalMethod() {
        return 5; // This is the method we want to isolate
    }

    public int anotherMethod() {
        return 10;
    }
}
로그인 후 복사
: <🎜 🎜>

add를 조롱 할 수 있습니다. 그런 다음 internalMethod를 사용하여 <🎜 🎜>를 스텁하여 10을 반환하여 internalMethod 메소드의 테스트에서 동작을 분리합니다. 그런 다음 어설 션은 조롱 된 <🎜 🎜>. 즉, 특정 방법을 선택적으로 조롱하면서 대부분의 방법의 실제 구현을 유지할 수 있습니다. 이를 사용하려면

를 사용하여 스파이를 만듭니다. 그런 다음 Mockito의
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

public class MyClassTest {
    @Test
    void testAddMethod() {
        MyClass myClassSpy = spy(MyClass.class);
        when(myClassSpy.internalMethod()).thenReturn(10); // Mock the internal method

        int result = myClassSpy.add(2, 3);
        assertEquals(15, result); // 2 + 3 + 10 = 15
    }
}
로그인 후 복사
메소드를 사용하여 조롱하려는 메소드의 동작을 지정합니다. 예를 들어 :

MyClass 스파이 객체 가 생성됩니다. on when(myClassSpy.internalMethod()).thenReturn(10);에 대한 호출은 10을 반환합니다. 다른 모든 방법은 실제 구현을 사용합니다. 이를 통해 나머지 클래스와 분리하여 특정 방법의 동작을 대상 테스트 할 수 있습니다. 조롱하려는 메소드의 동작을 정의하려면 를 사용해야합니다. 그렇지 않으면 실제 구현이라고 부릅니다. internalMethod add 동일한 클래스 내에서 방법을 테스트 할 때 모의에 비해 모키토 스파이를 사용하는 잠재적 인 함정은 무엇입니까? add internalMethod 스파이는 실제 구현과의 상호 작용 테스트의 이점을 제공하지만 몇 가지 잠재적 인 함정을 소개합니다.의도하지 않은 부작용 :

    스파이가 원래 구현을 유지하기 때문에, 새롭지 않은 메소드의 부작용은 여전히 ​​발생합니다. 이로 인해 테스트 중에 예기치 않은 동작이 발생하고 테스트중인 장치를 분리하기가 어려워집니다. 가 객체의 상태를 수정하면 반환 값을 조롱하더라도 수정이 여전히 발생합니다.
  • 어려운 디버깅 : 예기치 않은 동작이 발생하면 오류의 소스를 지적하는 것이 어려울 수 있습니다. 테스트중인 메소드 또는 새끼가없는 메소드의 부작용에 문제가 있습니까? internalMethod 타이트 커플 링 : 스파이는 테스트와 클래스의 구현 세부 사항간에 더 엄격한 커플 링을 초래할 수 있습니다. 기능이 동일하게 유지 되더라도 구현의 변경 사항은 테스트를 중단 할 수 있습니다.
  • 불필요한 복잡성 :
  • 간단한 모의를 사용하여 방법을 효과적으로 테스트 할 수 있다면 스파이의 추가 복잡성이 필요하지 않습니다. 조롱은 일반적으로 단순하고 예상치 못한 부작용에 걸리기 쉬운 부작용이 덜됩니다.
  • 단위 테스트 중에 내부 메소드 호출을 처리 할 때 Mockito 스파이를 언제 선택해야합니까?
  • 스파이를 사용하기 위해 강요된 이유가 없다면 일반적으로 스파이를 조롱하는 것을 선호해야합니다. 다음과 같은 경우 스파이를 선택하십시오 : 상호 작용 테스트 :
  • 테스트중인 메소드와 내부 방법 사이의 상호 작용을 테스트해야하며, 내부 방법은 쉽게 조롱 할 수없는 중요한 부작용 또는 종속성을 가지고 있습니다. 레거시 코드를 쉽게 수행 할 수 없습니다. 조롱. 제한 제어 : 는 복잡한 종속성을 가진 최종 방법이나 방법을 다룰 때와 같은 클래스의 내부 방법을 제한적으로 제어 할 수 있습니다. 그러나 이러한 시나리오에서도 위에서 언급 한 잠재적 인 함정을 신중하게 고려합니다. 가능하면 코드를보다 테스트 가능하게 만들기 위해 코드를 리팩토링하는 것은 일반적으로 복잡한 의존성이나 부작용을 중심으로 스파이에 의존하는 것보다 더 나은 장기 솔루션입니다. 종종 우려가 명확하게 분리 된 잘 구조화 된 디자인은 모의를 사용하여 더 간단하고 신뢰할 수있는 테스트를 허용합니다.

위 내용은 Mockito Spy : 동일한 클래스 예제에서 메소드 조롱의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿