> Java > java지도 시간 > Mockito: `doReturn()` 대 `when()`: 언제 어느 것을 스파이 개체와 함께 사용해야 합니까?

Mockito: `doReturn()` 대 `when()`: 언제 어느 것을 스파이 개체와 함께 사용해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-28 18:19:15
원래의
1003명이 탐색했습니다.

Mockito: `doReturn()` vs. `when()`: When Should You Use Which with Spied Objects?

Mockito: doReturn()과 when()의 미묘한 차이 이해

테스트 기능을 향상하기 위해 모의 프레임워크 Mockito를 활용할 때 개발자는 doReturn()을 자주 접하게 됩니다. 및 when() 메소드. 두 메서드 모두 스텁 메서드 호출의 목적을 제공하지만 스파이 대상 개체(@Spy 주석 처리)로 작업할 때 두 메서드 사이에는 미묘한 차이가 있습니다.

when(...).thenReturn(...) 대 doReturn(...).when(...)

when(...).thenReturn(...):

  • 지정된 값을 반환하기 전에 실제 메서드를 호출합니다.
  • 호출된 메서드에서 예외가 발생하면 이를 처리하거나 조롱해야 합니다. 별도로.

doReturn(...).when(...):

  • 실제 메서드 호출을 완전히 방지합니다.

실제 예

다음 사항을 고려하세요. MyClass:

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

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}
로그인 후 복사

다음으로 테스트 스파이

doReturn(...).when(...):

@Spy
private MyClass myClass;

// Works as expected
doReturn("test").when(myClass).anotherMethodInClass();
로그인 후 복사

when(...).thenReturn(.. .):

// Throws a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");
로그인 후 복사

이 시나리오에서 doReturn()은 다음의 예외를 보장합니다. anotherMethodInClass()는 원하는 값을 반환하는 동안 회피됩니다. 대조적으로, when()은 실제 메소드 호출을 트리거하여 NullPointerException이 발생합니다.

따라서 스파이 대상 객체로 작업할 때 doReturn()과 when() 사이의 선택은 호출할지 여부에 따라 달라집니다. 실제 방법을 사용하거나 완전히 우회합니다.

위 내용은 Mockito: `doReturn()` 대 `when()`: 언제 어느 것을 스파이 개체와 함께 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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