logo

모의 대 스텁 대 스파이

모조품

Mock은 메소드 호출을 저장하는 객체입니다. 테스트에 사용되는 종속성에 대한 동적 래퍼라고 합니다. Java 클래스 간의 상호 작용을 기록하고 확인하는 데 사용됩니다. 모의는 테스트 더블의 가장 강력하고 유연한 버전으로 알려져 있습니다. 우리는 조롱하는 방법을 사용합니다. 모조품() .

모의 개체를 사용하는 주요 기능은 모의 개체의 동작을 완전히 제어할 수 있다는 것입니다. 모의 객체는 일반적으로 다음 용도로 사용됩니다. 행동 검증 . 동작이라는 용어는 개체에 적용되는 올바른 방법과 경로를 확인하는 것을 의미합니다.

Mock은 대부분 라이브러리나 Mockito, JMock, EasyMock과 같은 모의 프레임워크를 사용하여 생성됩니다. 스텁이 충분하지 않은 대규모 테스트 모음을 테스트하는 데 사용됩니다. mock의 필수 기능 중 하나는 주어진 메서드가 몇 번 호출되었는지 확인할 수 있다는 것입니다.

테스트 유형

다음 코드 조각은 mock()을 사용하는 방법을 보여줍니다.

 ToDoService doService = mock(ToDoService.class); 

그루터기

스텁은 미리 정의된 데이터를 보유하고 이를 사용하여 테스트 중에 응답을 제공하는 개체입니다. 즉, 스텁은 테스트에 필요한 최소한의 메서드만 갖고 실제 객체와 유사한 객체입니다. 스텁은 실제 데이터로 응답을 제공하는 객체를 사용하고 싶지 않을 때 사용됩니다. 스텁은 가장 가벼운 것으로 간주되며 가장 정적 버전의 테스트는 두 배입니다.

스텁의 주요 기능은 다음과 같습니다.

자바 수학 무작위
  • 입력에 관계없이 항상 미리 정의된 출력을 반환합니다.
  • 데이터베이스 개체와 유사하게 사용할 수 있습니다.
  • 스텁은 실제 객체를 생성하는 동안 발생하는 복잡성을 줄이는 데 사용됩니다. 그들은 주로 공연에 사용됩니다 상태 확인 .

스파이

스파이는 다음과 같이 알려져 있습니다. 부분적으로 모의 객체 . 이는 스파이가 실제 개체를 스터빙하거나 염탐하여 실제 개체의 부분 개체 또는 절반 더미를 생성한다는 의미입니다. 감시에서 실제 개체는 변경되지 않고 그대로 유지되며 우리는 이에 대한 몇 가지 특정 방법만 감시합니다. 즉, 우리는 기존의 (실제) 객체를 취하고 바꾸다 또는 스파이 그 방법 중 일부만.

스파이는 메서드로 가득 찬 거대한 클래스가 있고 특정 메서드를 모의하고 싶을 때 유용합니다. 이 시나리오에서는 모의 객체와 스텁보다는 스파이를 사용하는 것이 더 좋습니다. 메서드가 스텁되지 않은 경우 실제 메서드 동작을 호출합니다.

Mockito에서는 spy() 메소드를 사용하여 스파이 객체를 생성합니다. 이를 통해 실제 객체의 일반 메서드를 호출할 수 있습니다. 다음 코드 조각은 spy() 메서드를 사용하는 방법을 보여줍니다.

GB 대 MB
 List spyArrayList = spy(ArrayList.class); 

스텁과 모의의 차이점

매개변수 그루터기 모조품
데이터 소스 스텁의 데이터 소스는 하드코딩되어 있습니다. 일반적으로 테스트 스위트와 긴밀하게 결합됩니다. 모의 데이터는 테스트를 통해 설정됩니다.
작성자: 스텁은 일반적으로 손으로 작성되며 일부는 도구로 생성됩니다. Mock은 일반적으로 Mockito, JMock 및 WireMock과 같은 타사 라이브러리를 사용하여 생성됩니다.
용법 스텁은 주로 간단한 테스트 스위트에 사용됩니다. 모의는 주로 대규모 테스트 스위트에 사용됩니다.
그래픽 사용자 인터페이스(GUI) 스텁에는 GUI가 없습니다. 모의에는 GUI가 있습니다.

다음은 모의 객체와 스파이 객체의 몇 가지 차이점입니다.

매개변수 모조품 스파이
용법 모의는 완전히 모의 또는 더미 개체를 만드는 데 사용됩니다. 주로 대규모 테스트 스위트에 사용됩니다. 스파이는 부분 또는 절반의 모의 개체를 만드는 데 사용됩니다. 모의와 마찬가지로 스파이도 대규모 테스트 스위트에서 사용됩니다.
기본 동작 모의 객체를 사용할 때 메서드의 기본 동작(스텁되지 않은 경우)은 아무것도 하지 않습니다(아무 것도 수행하지 않음). 스파이 개체를 사용할 때 메서드의 기본 동작(스텁되지 않은 경우)은 실제 메서드 동작입니다.

이전 튜토리얼에서는 스텁(stubbing), 조롱(mocking), 스파이(spying)의 몇 가지 예를 논의했습니다. 스텁, 조롱, 감시 간의 차이점을 더 잘 이해하려면 예제를 살펴보세요.