>Java >java지도 시간 >Mockito: `doReturn()` vs. `when()` – 조롱을 위해 언제 which를 사용해야 합니까?

Mockito: `doReturn()` vs. `when()` – 조롱을 위해 언제 which를 사용해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 16:01:16985검색

Mockito: `doReturn()` vs. `when()` – When Should I Use Which for Mocking?

Mockito - Mocking을 위한 doReturn()과 when()의 차이점 탐색

Spring MVC 애플리케이션에서 Mockito의 기능을 활용할 때 개발자는 doReturn(...).when(...)과 doReturn(...).when(...) 사이의 유사점이 자주 발생합니다. 언제(...).thenReturn(...). 이는 명백한 동등성을 고려할 때 이 두 가지 방법이 존재하는 이유에 대한 질문을 촉발시킵니다.

두 접근 방식 모두 @Mock 주석이 달린 모의 객체를 사용하여 동일한 결과를 산출하지만, @Spy 주석이 달린 스파이 개체를 사용하면 미묘한 차이가 나타납니다. 지정된 값을 반환하기 전에 실제 메서드 호출을 실행하는 when(...).thenReturn(...)과 달리 doReturn(...)은 메서드 호출을 완전히 우회합니다.

이러한 구별은 다음과 같은 경우에 중요합니다. 예외를 발생시키는 메서드가 있는 스파이 개체를 처리합니다. 예를 들어, 두 가지 메서드가 있는 다음 클래스를 고려해 보세요.

public class MyClass {
    protected String methodToBeTested() {
        return anotherMethodInClass();
    }

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}

테스트 클래스에서:

@Spy
private MyClass myClass;

// ...

// Executes methodToBeTested() and swallows the NullPointerException
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException without executing methodToBeTested()
when(myClass.anotherMethodInClass()).thenReturn("test");

시연된 것처럼 doReturn(...)을 사용하면 반환 값을 제어할 수 있습니다. 메소드 실행을 트리거하지 않고, when(...)은 메소드를 먼저 실행한 다음 지정된 결과를 제공합니다. 이러한 미묘한 차이를 통해 객체 모의 및 예외 관리에 대한 더 큰 제어가 가능해지며 doReturn(...)은 예외를 발생시킬 수 있는 스파이 객체를 처리할 때 선호되는 선택이 됩니다.

위 내용은 Mockito: `doReturn()` vs. `when()` – 조롱을 위해 언제 which를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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