[java] Mockito와 Hamcrest를 함께 사용하는 방법

Mockito는 자바를 사용하여 유닛 테스트를 작성할 때 mock 객체를 만들고 관리하는 도구입니다. Hamcrest 라이브러리는 테스트 코드에서 더 읽기 쉬운 형식으로 단언을 표현할 수 있는 도구입니다. 이 두 라이브러리를 함께 사용하여 테스트 코드를 작성하는 방법을 살펴보겠습니다.

Mockito 및 Hamcrest 의존성 추가

먼저, Maven 또는 Gradle과 같은 빌드 도구를 사용하여 Mockito와 Hamcrest의 의존성을 프로젝트에 추가해야 합니다.

Maven을 사용하는 경우 pom.xml 파일에 다음과 같이 의존성을 추가할 수 있습니다:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.9.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>2.2</version>
    <scope>test</scope>
</dependency>

Gradle을 사용하는 경우 build.gradle 파일에 다음을 추가할 수 있습니다:

testImplementation 'org.mockito:mockito-core:3.9.0'
testImplementation 'org.hamcrest:hamcrest-library:2.2'

Mockito 및 Hamcrest를 사용한 테스트 코드 작성

이제 Mockito 및 Hamcrest를 사용하여 테스트 코드를 작성할 수 있습니다. 예를 들어, 다음과 같이 Mockito를 사용하여 mock 객체를 생성하고 Hamcrest를 사용하여 단언을 추가할 수 있습니다:

import static org.mockito.Mockito.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

public class ExampleTest {

    @Test
    public void testSomething() {
        // mock 객체 생성
        SomeClass mockObject = mock(SomeClass.class);
        
        // 행위 검증
        verify(mockObject).someMethod();

        // Hamcrest를 사용한 단언 추가
        assertThat(someValue, is(notNullValue()));
        assertThat(someValue, is(equalTo(expectedValue)));
    }
}

위 코드에서 SomeClass는 테스트 대상이며, someMethod()는 해당 클래스의 메서드입니다.

Mockito는 mock 객체를 생성하고 행위를 검증하는 데 사용되며, Hamcrest는 테스트 결과에 대한 단언을 지원합니다.

이렇게 함께 사용하면 Mockito로 mock 객체를 관리하고 Hamcrest로 테스트 결과를 검증하는 유연하고 가독성 높은 테스트 코드를 작성할 수 있습니다.

결론

Mockito와 Hamcrest는 테스트 주도 개발(Test-Driven Development, TDD) 및 유닛 테스트 작성을 쉽게 만들어주는 강력한 도구입니다. 이 두 라이브러리를 함께 사용하여 테스트 코드를 작성하면 가독성이 좋고 유지보수가 용이한 코드를 만들 수 있습니다.


참고 자료: