[java] Java Cucumber에서 구체적인 예외 검증하기

Java Cucumber는 BDD(Behavior-Driven Development)를 위한 자바 기반의 테스트 프레임워크로, 테스트 코드를 가독성 있고 비즈니스 요구사항에 맞게 작성할 수 있게 도와줍니다. 예외 처리에 대한 검증은 소프트웨어 품질을 보장하기 위해 중요한 요소 중 하나입니다. 이번 글에서는 Java Cucumber를 사용하여 구체적인 예외에 대한 검증 방법에 대해 알아보겠습니다.

시나리오 정의하기

가정해보자면, 우리는 계산기 애플리케이션을 개발하고 있습니다. 사용자는 두 숫자를 입력하고 연산을 수행할 수 있도록 합니다. 그리고 만약 0으로 나눌 때는 ArithmeticException이 발생하도록 합니다. 이때, Cucumber를 사용하여 해당 예외에 대한 검증을 진행해보도록 하겠습니다.

예외 검증 스텝 작성하기

먼저, Cucumber 시나리오를 정의한 뒤에 예외 검증 스텝을 작성해야 합니다. 아래는 시나리오와 예외 검증 스텝에 관한 예시 코드입니다.

Feature: Divide Operation
  Scenario: Division by zero should throw ArithmeticException
    Given I have two numbers
    When I divide the first number by zero
    Then I should get an ArithmeticException

위의 코드에서는 “Division by zero should throw ArithmeticException”라는 시나리오를 정의하고 있습니다. 두 숫자를 입력한 뒤 첫 번째 숫자를 0으로 나누면 ArithmeticException이 발생해야 합니다.

이제 해당 시나리오에 대한 예외 검증 스텝을 작성해보겠습니다. 아래는 그 예시입니다.

import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.junit.jupiter.api.Assertions;

public class DivideSteps {
    private int firstNumber;
    private int secondNumber;
    private int result;

    @Given("I have two numbers")
    public void iHaveTwoNumbers() {
        firstNumber = 10;
        secondNumber = 0;
    }

    @When("I divide the first number by zero")
    public void iDivideTheFirstNumberByZero() {
        Assertions.assertThrows(ArithmeticException.class, () -> {
            result = firstNumber / secondNumber;
        });
    }

    @Then("I should get an ArithmeticException")
    public void iShouldGetAnArithmeticException() {
        // No assertion needed, thrown exception is enough
    }
}

위의 코드에서는 각 시나리오 스텝에 해당하는 Cucumber 어노테이션을 사용하여 메소드를 정의하고 있습니다. iDivideTheFirstNumberByZero 메소드에서는 Assertions.assertThrows를 사용하여 0으로 나눌 때 ArithmeticException이 발생하는지 검증하고 있습니다.

테스트 실행하기

테스트 코드를 모두 작성했다면, 이제 해당 테스트를 실행해보면 됩니다. Cucumber를 사용하기 위해 필요한 의존성을 추가하고, 테스트를 실행하는 방법은 다음과 같습니다.

<!-- pom.xml -->
<dependencies>
  ...
  <dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>6.11.0</version>
    <scope>test</scope>
  </dependency>
  ...
</dependencies>
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources/features")
public class CucumberRunner {
    // Empty, just to run the Cucumber tests
}

위의 코드는 Cucumber를 실행하기 위해 필요한 설정을 담고 있습니다. @RunWith@CucumberOptions 어노테이션을 사용하여 테스트 파일을 지정합니다.

테스트를 실행하기 위해 Maven을 사용한다면, 다음과 같이 명령을 실행할 수 있습니다.

mvn test

테스트를 실행하면 예외 검증 스텝이 정확히 수행되었는지 확인할 수 있습니다. 만약 첫 번째 숫자를 0으로 나누었다면 ArithmeticException이 발생하고 테스트가 성공적으로 통과될 것입니다.

결론

이번 글에서는 Java Cucumber를 사용하여 구체적인 예외에 대한 검증 방법에 대해 알아보았습니다. Cucumber를 사용하면 비즈니스 요구사항에 맞는 가독성 좋은 테스트 코드를 작성할 수 있으며, 예외 처리에 대한 검증을 간편하게 수행할 수 있습니다.