[java] Java Cucumber에서 스텝을 클래스로 분할하기

Cucumber는 BDD(Behavior-Driven Development)를 지원하기 위한 테스트 프레임워크입니다. Java Cucumber를 사용할 때, 스탭(Step)을 스텝 정의와 분리해야 할 때가 있습니다. 이렇게 하면 코드를 재사용하고 테스트의 가독성과 유지 보수성을 향상시킬 수 있습니다.

아래는 Java Cucumber에서 스텝을 클래스로 분할하는 방법에 대한 예시입니다.

스텝 클래스 생성하기

먼저, 스텝을 클래스로 분할하기 위해 새로운 클래스를 생성해야 합니다. 이 클래스는 테스트 시나리오에서 사용하는 스텝 메서드를 정의할 것입니다.

package com.example.steps;

import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;

public class MyStepDefinitions {

    @Given("사용자가 로그인 페이지에 접속한다")
    public void userVisitsLoginPage() {
        // 로그인 페이지에 접속하는 로직 작성
    }

    @When("사용자가 아이디 {string}과 비밀번호 {string}으로 로그인한다")
    public void userLogsInWithCredentials(String username, String password) {
        // 아이디와 비밀번호를 사용하여 로그인하는 로직 작성
    }

    @Then("로그인이 성공한다")
    public void loginIsSuccessful() {
        // 로그인이 성공한 경우의 검증 로직 작성
    }

    @Given("사용자가 로그아웃한다")
    public void userLogsOut() {
        // 로그아웃하는 로직 작성
    }

    // 추가적인 스텝 정의 메서드 작성
}

스텝 클래스 사용하기

이제 스텝 클래스를 테스트에서 사용해보겠습니다. 테스트 시나리오에 따라 @Given, @When, @Then 어노테이션을 사용하여 해당하는 스텝 메서드를 호출합니다.

package com.example.tests;

import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import com.example.steps.MyStepDefinitions;

public class MyTest {

    private MyStepDefinitions steps = new MyStepDefinitions();

    @Given("사용자가 로그인 페이지에 접속한다")
    public void userVisitsLoginPage() {
        steps.userVisitsLoginPage();
    }

    @When("사용자가 아이디 {string}과 비밀번호 {string}으로 로그인한다")
    public void userLogsInWithCredentials(String username, String password) {
        steps.userLogsInWithCredentials(username, password);
    }

    @Then("로그인이 성공한다")
    public void loginIsSuccessful() {
        steps.loginIsSuccessful();
    }

    @Given("사용자가 로그아웃한다")
    public void userLogsOut() {
        steps.userLogsOut();
    }

    // 추가적인 테스트 메서드 작성
}

위의 예시에서는 MyStepDefinitions 클래스를 MyTest 테스트 클래스에서 호출하여 사용합니다.

결론

Java Cucumber에서 스텝을 클래스로 분할하면 테스트 코드를 더 구조적이고 재사용성 있게 만들 수 있습니다. 이를 통해 가독성과 유지 보수성을 향상시킬 수 있으며, 효율적인 테스트를 작성할 수 있습니다. 이를 통해 개발자는 더 효율적이고 직관적인 테스트를 작성할 수 있게 됩니다.

참고자료