Mockito 배우기 - Mockito의 Annotation 지원

3567 단어 작업JUnit
Mockito는 변수에 대한 주석을 지원합니다. 예를 들어, 모크의 대상을 테스트 클래스의 속성으로 설정한 다음, 주석의 방식으로 @Mock으로 정의하면 중복 코드를 줄이고, 읽을 수 있으며, 오류를 정렬하기 쉽습니다.@Mock을 지원하는 것 외에 Mockito가 지원하는 주석은 @Spy(실제 대상 감시), @Captor(파라미터 포획기), @InjectMocks(mock 대상 자동 주입)도 있습니다.
Annotation 초기화
Annotation만으로는 충분하지 않으므로 초기화 작업을 수행해야 합니다.초기화 방법: MockitoAnnotations.initMocks (testClass) 매개 변수인testClass는 당신이 쓴 테스트 클래스입니다.일반적으로 Junit4의 @Before 정의 방법에서 다음과 같이 초기화 작업을 수행합니다.
@Before
public void initMocks() {
    MockitoAnnotations.initMocks(this);
}

상기 초기화 방법 외에 Mockito가 제공하는 Junit Runner: Mockito JUnit Runner를 사용하면 위의 절차를 생략할 수 있습니다.
@RunWith(MockitoJUnit44Runner.class)
public class ExampleTest {
	...
}

@Mock 메모
@Mock 메모를 사용하여 mock 객체를 정의하면 다음과 같은 이점이 있습니다.
1. 모크 대상의 창설을 편리하게 한다
2. 모크 대상이 만든 중복 코드 감소
3. 테스트 코드의 가독성 향상
4. 변수 이름은 모크 대상의 표시이기 때문에 잘못 배열하기 쉽다
@Mock 메모도 사용자 정의name 및 answer 속성을 지원합니다.
다음은 공식적으로 @Mock 사용 예입니다.
public class ArticleManagerTest extends SampleBaseTestCase {
    @Mock 
    private ArticleCalculator calculator;
    @Mock(name = "dbMock") 
    private ArticleDatabase database;
    @Mock(answer = RETURNS_MOCKS) 
    private UserProvider userProvider;

    private ArticleManager manager;

    @Before 
    public void setup() {
        manager = new ArticleManager(userProvider, database, calculator);
    }
}
public class SampleBaseTestCase {
    @Before 
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }
}

@Spy 메모
Spy 사용 방법은 앞의 섹션을 참조하십시오. 여기서 더 이상 설명하지 않습니다. 다음은 사용 방법입니다.
public class Test{
    @Spy 
    Foo spyOnFoo = new Foo();

    @Before
    public void init(){
       MockitoAnnotations.initMocks(this);
    }
    ...
}

@Captor 메모
@Captor는 매개 변수 포획기의 주석입니다. 사용법은 앞에서 설명한 바와 같이 주석을 통해 쉽게 정의할 수 있습니다.사용 예는 다음과 같습니다.
public class Test {
    @Captor
    ArgumentCaptor<AsyncCallback<Foo>> captor;
    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void shouldDoSomethingUseful() {
        // ...
        verify(mock.doStuff(captor.capture()));
        assertEquals("foo", captor.getValue());
    }
}

@InjectMocks 메모
이 주석을 통해 모크 대상을 자동으로 주입할 수 있습니다.현재 버전은 setter 방식으로만 주입할 수 있습니다. Mockito는 먼저 형식 주입을 시도합니다. 같은 종류의 mock 대상이 여러 개 있으면 이름에 따라 주입합니다.주입이 실패할 때 Mockito는 어떠한 이상도 던지지 않기 때문에 수동으로 안전성을 검증해야 할 수도 있습니다.
예:
@RunWith(MockitoJUnit44Runner.class)
public class ArticleManagerTest {
    @Mock
    private ArticleCalculator calculator;
    @Mock
    private ArticleDatabase database;
    @Spy
    private UserProvider userProvider = new ConsumerUserProvider();
    @InjectMocks
    private ArticleManager manager = new ArticleManager();
	
    @Test
    public void shouldDoSomething() {
        manager.initiateArticle();
        verify(database).addListener(any(ArticleListener.class));
    }
}

상례에서, Article Database는 Article Manager의 속성입니다. Article Manager는 @InjectMocks에 주석을 달았기 때문에, 형식에 따라 자동으로 setter 방법을 호출하여 Article Database를 설정합니다.

좋은 웹페이지 즐겨찾기