[java] Java Cucumber에서 데이터셋 공유하기

Java Cucumber는 통합 테스트 프레임워크로서 테스트 시나리오를 기반으로 동작하는 BDD(Behavior-Driven Development) 방법론을 지원합니다. 이를 통해 개발자와 비기술적인 이해관계자들 사이의 의사소통을 원활하게 할 수 있습니다.

때때로 여러 개의 시나리오에서 공통으로 사용하는 데이터셋을 공유해야 할 때가 있습니다. 이 글에서는 Java Cucumber에서 데이터셋을 공유하기 위한 방법에 대해 알아보겠습니다.

ScenarioContext 클래스 사용하기

Java Cucumber에서 데이터셋을 공유하기 위해 ScenarioContext 클래스를 사용할 수 있습니다. 이 클래스는 Scenario마다 하나씩 생성되며, 데이터를 저장하고 검색할 수 있는 맵 형태의 저장소 역할을 합니다. 아래는 ScenarioContext 클래스를 활용한 예제 코드입니다.

import cucumber.api.java.After;
import cucumber.api.java.Before;
import cucumber.api.java8.En;
import io.cucumber.java.Scenario;
import java.util.HashMap;
import java.util.Map;

public class MyStepDefinitions implements En {
    private ScenarioContext context;

    public MyStepDefinitions(ScenarioContext context) {
        this.context = context;
    }

    @Before
    public void before(Scenario scenario) {
        context.set("scenario", scenario);
    }

    @After
    public void after() {
        context.clear();
    }

    public static class ScenarioContext {
        private Map<String, Object> scenarioData = new HashMap<>();

        public void set(String key, Object value) {
            scenarioData.put(key, value);
        }

        public Object get(String key) {
            return scenarioData.get(key);
        }

        public void clear() {
            scenarioData.clear();
        }
    }
}

위의 예제 코드는 ScenarioContext 클래스를 정의한 후, Before 훅을 활용하여 현재 시나리오를 ScenarioContext에 저장하고, After 훅을 활용하여 데이터를 초기화하는 방법을 보여줍니다.

데이터 공유하기

이제 데이터를 공유해보겠습니다. 아래는 두 개의 시나리오에서 name이라는 데이터를 공유하는 예제입니다.

public class StepDefinitions extends MyStepDefinitions {
    public StepDefinitions(ScenarioContext context) {
        super(context);

        Given("I have a name {string}", (String name) -> {
            context.set("name", name);
        });

        When("I print the name", () -> {
            System.out.println(context.get("name"));
        });
    }
}

위의 예제 코드에서 Given 단계에서 nameScenarioContext에 저장하고, When 단계에서 name을 가져와 출력하고 있습니다. 이렇게 하면 두 개의 시나리오에서 동일한 name 값을 공유할 수 있습니다.

결론

Java Cucumber에서는 ScenarioContext 클래스를 활용하여 데이터셋을 공유할 수 있습니다. 이를 통해 테스트 시나리오 간에 데이터를 효과적으로 공유하고 관리할 수 있습니다. 이를 통해 반복적인 코드 작성을 줄이고 효율적인 테스트를 수행할 수 있습니다.

참고 자료