>Java >java지도 시간 >Mockito: `doReturn()` 대 `when()`: 언제 어느 것을 사용해야 합니까?

Mockito: `doReturn()` 대 `when()`: 언제 어느 것을 사용해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-28 03:44:10927검색

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

Mockito: doReturn()과 when()의 차이점 이해

Mockito의 doReturn() 사이에 혼동이 있는 것은 이해할 만합니다... when() 및 when()...thenReturn() 메서드는 동일한 작업을 수행하는 것처럼 보일 수 있습니다. 둘 다 메서드 호출을 모의하고 미리 정의된 값을 반환할 수 있지만, 모의 객체(@Mock 주석 처리) 대신 스파이 대상 객체(@Spy 주석 처리)를 사용할 때 관련된 미묘한 차이가 있습니다.

키 차이점: 메서드 호출 동작

중요한 차이점은 스파이와 상호 작용할 때 이러한 메서드가 동작하는 방식에 있습니다. object:

  • when()...thenReturn() 지정된 값을 반환하기 전에 실제 메서드를 호출
  • 합니다. 이는 실제 메서드에서 발생하는 모든 예외가 여전히 처리되어야 함을 의미합니다.
  • doReturn()...when() 메서드를 전혀 호출하지 않습니다
  • . 대신 미리 정의된 값을 직접 반환합니다. 이는 실제 메소드 호출을 우회합니다.

차이점을 설명하는 예:

다음 코드를 고려하세요.
public class MyClass {
    public String methodToBeTested() {
        return anotherMethodInClass();
    }

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

스파이를 사용하여 테스트 object:

@Spy
private MyClass myClass;

// ...

// This approach will work without throwing an exception
doReturn("test").when(myClass).anotherMethodInClass();

// This approach will throw a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");

스파이 개체를 사용하면 when()...thenReturn()이 NullPointerException을 발생시키는 anotherMethodInClass()를 호출하려고 시도합니다. 반면 doReturn()...when()은 메서드 호출을 피하고 "test"를 직접 반환하여 예외를 억제합니다.

결론

이들 사이의 차이점 스파이 개체를 사용할 때 두 가지 방법이 분명해집니다. 스파이 대상 객체의 경우 doReturn()...when()은 실제 메서드 호출을 우회하고 미리 정의된 값을 직접 반환하여 더 큰 제어 기능을 제공합니다. 이와 대조적으로, when()...thenReturn()은 실제 메서드를 호출하므로 예외나 기타 의도하지 않은 동작이 발생할 수 있습니다. 따라서 적절한 방법을 선택하는 것은 원하는 동작과 모의 객체를 사용하는지 스파이 객체를 사용하는지 여부에 따라 달라집니다.

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

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