[java] Java Cucumber에서 테스트 실행 순서 정하기

Cucumber는 행위 주도 개발(Behavior Driven Development, BDD)을 위한 테스트 도구로, 자바 언어를 기반으로 동작합니다. Cucumber를 사용하여 테스트를 작성할 때, 기본적으로는 테스트 스텝이 순서대로 실행되지만, 때로는 특정한 순서로 테스트를 실행해야 할 때가 있습니다. 이번 글에서는 Java Cucumber에서 테스트 실행 순서를 정하는 방법에 대해 알아보겠습니다.

@RunWith(Cucumber.class) 어노테이션 사용하기

Java Cucumber에서 테스트 실행 순서를 정하는 가장 간단한 방법은 @RunWith(Cucumber.class) 어노테이션을 사용하는 것입니다. @RunWith 어노테이션은 JUnit에서 사용되는 테스트 러너를 지정하는 데에 사용되며, Cucumber 클래스를 지정하여 Cucumber의 기능을 이용할 수 있습니다.

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "stepDefinitions",
    plugin = {"pretty", "html:target/cucumber-reports"}
)
public class TestRunner {
}

위 코드에서 @RunWith(Cucumber.class) 어노테이션을 사용하여 Cucumber를 JUnit 테스트 러너로 지정하고 있습니다. 이렇게 하면 Cucumber의 어노테이션을 사용하여 테스트를 구성할 수 있게 됩니다.

Cucumber Scenario Outline 사용하기

Cucumber에서는 테스트 케이스를 작성할 때 Scenario Outline을 사용하여 여러 개의 테스트 스텝을 한 번에 실행할 수 있습니다. Scenario Outline은 테스트 데이터를 템플릿화하여 여러 번 반복 실행할 수 있도록 합니다.

Feature: Example Feature

  Scenario Outline: Example Scenario
    Given I have <item> in my inventory
    When I sell <item>
    Then my inventory should decrease by <quantity>

    Examples:
      | item  | quantity |
      | Apple | 2        |
      | Orange | 3       |
      | Banana | 1       |

위의 예시에서 Examples 키워드 아래에 테스트 데이터를 정의하고 있습니다. Scenario Outline을 사용하여 템플릿화된 테스트 스텝을 정의하고, Examples 키워드 아래에 여러 개의 테스트 데이터를 작성하여 동일한 테스트 스텝을 여러 번 실행할 수 있습니다.

@Before 및 @After 어노테이션 사용하기

Cucumber에서는 @Before@After 어노테이션을 사용하여 각 테스트 스텝이 실행되기 전과 후에 수행할 작업을 정의할 수 있습니다. 이를 활용하여 각 테스트 스텝을 실행하기 전에 초기화 작업을 수행하거나, 모든 테스트 스텝이 실행된 후에 정리 작업을 수행할 수 있습니다.

import cucumber.api.java.Before;
import cucumber.api.java.After;

public class StepDefinitions {

    @Before
    public void beforeEachScenario(){
        // 각 테스트 스텝 실행 전에 수행할 작업
    }

    @After
    public void afterEachScenario(){
        // 각 테스트 스텝 실행 후에 수행할 작업
    }

    // Step Definitions...
}

위의 예시에서 @Before 어노테이션을 사용하여 beforeEachScenario() 메소드를 정의하고 있습니다. 이 메소드는 각각의 테스트 스텝이 실행되기 전에 호출되어 초기화 작업을 수행합니다. 마찬가지로 @After 어노테이션을 사용하여 afterEachScenario() 메소드를 정의하여 각 테스트 스텝이 실행된 후에 정리 작업을 수행할 수 있습니다.

결론

Java Cucumber에서 테스트 실행 순서를 정하는 방법에 대해 알아보았습니다. @RunWith(Cucumber.class) 어노테이션을 사용하여 Cucumber를 JUnit 테스트 러너로 지정하거나, Scenario Outline을 사용하여 여러 개의 테스트 스텝을 실행하거나, @Before@After 어노테이션을 사용하여 초기화 및 정리 작업을 수행할 수 있습니다. 이러한 방법들을 조합하여 효율적이고 유지보수가 용이한 테스트 코드를 작성할 수 있습니다.


참고 문서: