[java] Java Cucumber에서 결과 비교 도구 사용하기

Java 프로젝트에서 BDD(행위 주도 개발)를 구현할 때 Cucumber를 사용하는 경우가 많습니다. Cucumber는 사용자 친화적인 테스트 스타일을 제공하면서도 Java 코드와 통합되어 있어 테스트하는 동안 편리하게 사용할 수 있습니다. 그러나 Cucumber가 제공하는 Assert문은 간단한 동일성 검사에만 사용할 수 있으며, 테스트 결과를 비교하기에는 부족할 수 있습니다. 이 문제를 해결하기 위해 결과 비교 도구를 사용할 수 있습니다.

Hamcrest 사용하기

Hamcrest는 자바용 단언 라이브러리로서, Cucumber에서 결과 비교 도구로 많이 사용됩니다. Hamcrest는 자연어와 유사한 문법을 통해 테스트 결과를 간결하게 표현할 수 있습니다. 다음은 Hamcrest를 사용하여 Cucumber에서 결과를 비교하는 예제입니다.

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;

...

@Given("^두 수가 주어졌을 때$")
public void givenTwoNumbers() {
    // 두 수가 주어졌을 때 실행할 코드
}

@When("^두 수를 더한다$")
public void addTwoNumbers() {
    // 두 수를 더하는 코드
}

@Then("^더한 결과는 (\\d+)이다$")
public void verifySum(int expectedSum) {
    int actualSum = // 더한 결과를 얻는 코드

    // Hamcrest를 사용하여 결과 비교
    assertThat(actualSum, is(expectedSum));
}

이 예제에서는 Hamcrest의 assertThat 메서드를 사용하여 실제 결과와 예상 결과를 비교했습니다. is 메서드는 값의 동일성을 검사합니다. 이를 통해 간단하고 읽기 쉬운 테스트 코드를 작성할 수 있습니다.

JUnit 사용하기

Cucumber와 함께 JUnit을 사용하여 결과를 비교하는 것도 가능합니다. JUnit은 Java에서 가장 널리 사용되는 테스트 프레임워크 중 하나로, 테스트 결과 비교를 위한 다양한 어설션 메서드를 제공합니다. 다음은 Cucumber와 JUnit을 함께 사용하는 예제입니다.

import static org.junit.Assert.assertEquals;

...

@Given("^두 수가 주어졌을 때$")
public void givenTwoNumbers() {
    // 두 수가 주어졌을 때 실행할 코드
}

@When("^두 수를 더한다$")
public void addTwoNumbers() {
    // 두 수를 더하는 코드
}

@Then("^더한 결과는 (\\d+)이다$")
public void verifySum(int expectedSum) {
    int actualSum = // 더한 결과를 얻는 코드

    // JUnit을 사용하여 결과 비교
    assertEquals(expectedSum, actualSum);
}

이 예제에서는 JUnit의 assertEquals 메서드를 사용하여 실제 결과와 예상 결과를 비교했습니다. JUnit은 두 값의 동일성을 검사하고, 필요에 따라 다른 어설션 메서드를 사용할 수도 있습니다.

결론

Java Cucumber에서 결과 비교 도구를 사용하면 테스트 코드를 더욱 간결하고 가독성 있게 작성할 수 있습니다. Hamcrest와 JUnit은 대표적인 결과 비교 도구로 많이 사용되며, 각각의 장단점이 있으므로 프로젝트 요구사항에 맞게 선택하여 사용할 수 있습니다.


참고 자료