>Java >java지도 시간 >Mockito를 사용하여 Java에서 메소드를 선택적으로 모의하는 방법은 무엇입니까?

Mockito를 사용하여 Java에서 메소드를 선택적으로 모의하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-07 18:34:13655검색

How to Selectively Mock Methods in Java with Mockito?

Mockito를 사용하여 Java의 선택적 메서드 모의

Java에서 Mockito를 사용하면 개발자는 다른 메서드는 영향을 받지 않고 클래스 내의 특정 메서드를 모의할 수 있습니다. 이 프로세스를 부분 모의 작업이라고 합니다.

다음 Stock 클래스를 고려하세요.

public class Stock {

    private final double price;
    private final int quantity;

    public Stock(double price, int quantity) {
        this.price = price;
        this.quantity = quantity;
    }

    public double getPrice() {
        return price;
    }

    public int getQuantity() {
        return quantity;
    }

    public double getValue() {
        return getPrice() * getQuantity();
    }
}

테스트 시나리오에서는 getPrice()와 getQuantity() 메서드를 사용하여 특정 값을 반환합니다. 그러나 우리는 getValue() 메소드가 의도한 계산을 수행하기를 원합니다.

부분 조롱을 사용하면 다음과 같이 이를 달성할 수 있습니다.

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
when(stock.getValue()).thenCallRealMethod();

여기서 구성:

  • when(stock.getPrice()).thenReturn(100.00);: 반환할 getPrice() 메서드를 모의합니다. 100.00.
  • when(stock.getQuantity()).thenReturn(200);: 반환할 getQuantity() 메서드를 모의합니다. 200.
  • when(stock.getValue()).thenCallRealMethod();: 원래 코드에 지정된 대로 getValue() 메서드가 실행되도록 지정합니다.

또는 spy() 메서드를 대신 사용할 수도 있습니다. mock():

Stock stock = spy(Stock.class);
doReturn(100.00).when(stock).getPrice();
doReturn(200).when(stock).getQuantity();

이 경우 스텁되지 않은 모든 메소드(예: getValue())는 원래 구현을 호출합니다.

모의 처리에 주목할 가치가 있습니다. getPrice() 및 getQuantity()와 같은 메소드는 getValue()가 모의 반환이 아닌 해당 값에 직접 의존하는 경우 원하는 결과를 생성하지 못할 수 있습니다. 가치. 이러한 경우에는 아래와 같이 모의 작업을 완전히 피하고 테스트의 실제 구현에 의존하는 것이 더 적절할 수 있습니다.

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
assertEquals(100.00 * 200, value, 0.00001);

위 내용은 Mockito를 사용하여 Java에서 메소드를 선택적으로 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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