[kotlin] Hamcrest의 TestNG 통합

프로젝트에서 자바 및 Kotlin과 함께 단위 테스트를 작성한다면 Hamcrest 및 TestNG를 함께 사용하는 것이 매우 좋습니다. Hamcrest는 테스트 주도 개발(Test-Driven Development) 및 행위 주도 개발(Behavior-Driven Development)에서 매우 유용한 매처(matcher) 라이브러리입니다. TestNG는 테스트 프레임워크로서 더 많은 형태의 테스트를 지원하며 JUnit와 함께 가장 인기 있는 자바 테스트 프레임워크 중 하나입니다.

이번 포스트에서는 Hamcrest와 TestNG를 함께 사용하여 효율적으로 테스트를 작성하는 방법에 대해 알아보겠습니다.

Hamcrest 시작하기

먼저, Maven 또는 Gradle 프로젝트로 시작하여 hamcrest-core 라이브러리를 추가해야 합니다. Maven을 사용하는 경우 아래와 같이 의존성을 추가할 수 있습니다.

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

Gradle을 사용하는 경우 다음 의존성을 추가할 수 있습니다.

testImplementation 'org.hamcrest:hamcrest-core:1.3'

TestNG 및 Hamcrest 통합

TestNG 및 Hamcrest를 함께 사용하여 테스트를 작성하기 위해 TestNG의 SoftAssert 클래스를 활용할 수 있습니다. SoftAssert를 사용하면 테스트 중에 오류를 무시하고 모든 테스트가 실행된 후에 한꺼번에 오류를 확인할 수 있습니다.

테스트 클래스에서 SoftAssert를 초기화하고 사용하는 예제는 다음과 같습니다.

import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

public class MyTest {
  
  @Test
  public void testWithSoftAssert() {
      SoftAssert softAssert = new SoftAssert();
      int actual = 5;
      int expected = 5;
      assertThat(actual, equalTo(expected));
      softAssert.assertAll();
  }
}

위의 예제에서는 SoftAssert를 사용하여 테스트 중에 오류를 확인합니다. assertThat 메서드는 Hamcrest의 매처를 사용하여 실제 값과 예상 값이 일치하는지 확인합니다.

테스트 작성하기

Hamcrest 매처는 assertThat 메서드를 사용하여 값이 예상되는 것과 일치하는지 확인하는데 유용합니다. 예를 들어, equalTo, closeTo, not 등의 매처를 사용하여 값을 검증할 수 있습니다. 이러한 매처를 활용하여 테스트 케이스를 작성하면 가독성이 뛰어나고 유지보수가 쉬워집니다.

결론

이번 포스트에서는 Hamcrest와 TestNG를 함께 사용하여 효율적인 단위 테스트를 작성하는 방법에 대해 알아보았습니다. Hamcrest의 매처를 사용하여 테스트 코드를 작성하면 가독성이 높아지고 테스트 케이스의 유지보수가 간단해집니다. TestNG의 SoftAssert를 활용하여 테스트 중에 오류를 무시하고 한꺼번에 확인할 수 있기 때문에 더욱 효율적으로 테스트할 수 있습니다.

참고문헌: