2.1 @Mock 주석
Mockito에서 목 객체로 작업하는 방법에는 두 가지가 있습니다. 첫 번째는 완전한 가상 개체를 만드는 것이고 두 번째는 기존 개체를 래퍼로 래핑하는 것입니다. 첫 번째부터 시작하겠습니다.
완전한 가상 개체를 만들려면 코드를 작성해야 합니다.
ClassName variable name = Mockito.mock(ClassName.class);
예를 들어 모의 ArrayList 클래스를 만들어 보겠습니다.
@ExtendWith(MockitoExtension.class)
class MockTest {
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
List mockList = Mockito.mock(ArrayList.class);
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
이 예제에서는 가짜 ArrayList를 만들고 mockList 변수에 참조를 저장합니다. 이 개체의 메서드는 아무 작업도 수행하지 않습니다.
그건 그렇고, 이 코드는 이것에 대한 특별한 주석이 있기 때문에 더 짧게 작성할 수 있습니다 @Mock
.
@ExtendWith(MockitoExtension.class)
class MockTest {
@Mock
List mockList;
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
두 번째 경우에는 MockitoExtension
클래스 코드 자체를 분석하고 필요한 스텁을 생성합니다. 메서드를 호출할 필요가 없습니다 Mockito.mock()
. 하나의 주석과 가상 개체가 준비되었습니다. 아름다움.
2.2 @Spy 주석
Mockito에서 두 번째로 중요한 객체 유형은 기존 객체에 대한 래퍼입니다. 한편으로는 기존 클래스를 사용할 수 있고 다른 한편으로는 이러한 개체의 모든 메서드 및 변수에 대한 호출을 가로채서 필요한 경우 작업을 수정할 수 있습니다. Mock 객체만큼 자주 사용됩니다.
개체에 대한 래퍼를 만들려면 코드를 작성해야 합니다.
ClassName variable name = Mockito.spy(an object);
ArrayList 클래스 주위에 래퍼가 있는 예:
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Test
public void whenMockAnnotation() {
List<String> mockList = Mockito.spy(new ArrayList<String>());
//these methods will work!
mockList.add("one");
mockList.add("two");
}
}
가장 간단한 형태로 래퍼 개체에 대한 호출은 원래 개체에 대한 호출을 리디렉션하는 것입니다. 이 참조는 내부에 유지됩니다 . 모든 것이 원본 객체와 동일하게 작동합니다.
- 주석을 사용하여 래퍼를 만들 수도 있습니다 @Spy
.
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Spy
List mockList = new ArrayList<String>();
@Test
public void whenMockAnnotation() {
// these methods will work!
mockList.add("one");
mockList.add("two");
}
}
이 두 코드 예제는 동일합니다.
GO TO FULL VERSION