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");
    }
}

이 두 코드 예제는 동일합니다.