[java] Mockito의 스파이(Spy) 객체와 비교

Mockito는 자바에서 모의(Mock) 객체를 생성하고 사용하는 데 매우 유용한 도구입니다. Mockito를 사용하면 메소드 호출 및 반환값을 테스트하기 위한 가짜 객체를 만들 수 있습니다. Mockito에서는 또한 스파이(Spy) 객체라고 알려진 다른 유형의 객체도 제공됩니다. 스파이 객체와 모의 객체는 다른 목적으로 사용되며 서로 다른 동작을 합니다.

모의(Mock) 객체

모의 객체는 주로 테스트의 기본적인 설계를 돕기 위해 사용됩니다. 특정 클래스나 인터페이스를 구현하지 않고 단지 행동을 모방하는 데 사용됩니다. 모의 객체는 주로 메소드 호출을 감시하고, 특정 메소드에 대한 반환값을 정의하거나 예외를 발생시키는 데 사용됩니다.

모의(Mock) 객체 사용 예시:

// 모의 객체 생성
List<String> mockList = mock(List.class);

// 메소드 호출 감시
when(mockList.size()).thenReturn(10);

// 메소드가 호출되었는지 확인
verify(mockList).size();

스파이(Spy) 객체

스파이 객체는 실제 객체의 메소드 호출을 감시하거나 재정의하기 위해 사용됩니다. 스파이 객체는 실제 메소드 내용을 유지하면서도 호출 여부나 횟수를 감시하고 필요한 경우 일부 동작을 수정할 수 있습니다.

스파이(Spy) 객체 사용 예시:

// 스파이 객체 생성
List<String> spyList = spy(new ArrayList<>());

// 실제 메소드 호출
spyList.add("one");
spyList.add("two");

// 메소드 호출 여부 확인
verify(spyList, times(2)).add(anyString());

결론

스파이(Spy) 객체와 모의(Mock) 객체는 Mockito에서 제공되는 두 가지 주요 유형의 가짜 객체입니다. 모의 객체는 주로 메소드 호출의 감시와 반환값의 제어를 위해 사용되고, 스파이 객체는 실제 객체의 행동을 유지하면서도 호출을 감시하고 변경할 수 있습니다.

Mockito를 사용하여 테스트할 때 적절한 목적에 따라 모의 객체나 스파이 객체를 선택하여 사용하는 것이 중요합니다.

참조: Mockito 공식문서