[java] Java Cucumber에서 데이터베이스 테스트 실행하기

Cucumber는 BDD (Behavior-Driven Development) 프레임워크로서, 개발자와 비 개발자간의 의사소통을 원활하게 도와줍니다. Cucumber와 Java를 함께 사용할 때, 데이터베이스 테스트를 실행하는 방법에 대해 알아보겠습니다.

1. 의존성 추가하기

먼저, Cucumber 및 데이터베이스 관련 라이브러리의 의존성을 프로젝트에 추가해야 합니다. 예를 들어, Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
    <!-- Cucumber -->
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>{Cucumber 버전}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>{Cucumber 버전}</version>
        <scope>test</scope>
    </dependency>

    <!-- 데이터베이스 드라이버 및 관련 라이브러리 -->
    <dependency>
        <groupId>{데이터베이스 드라이버 그룹ID}</groupId>
        <artifactId>{데이터베이스 드라이버 아티팩트ID}</artifactId>
        <version>{데이터베이스 드라이버 버전}</version>
    </dependency>
</dependencies>

2. 데이터베이스 설정하기

데이터베이스와의 테스트 연동을 위해서는 데이터베이스 설정이 필요합니다. 보통 application.properties 또는 application.yml 파일에 다음과 같이 데이터베이스 관련 설정을 추가합니다.

spring:
    datasource:
        url: jdbc:{데이터베이스 URL}
        username: {사용자 이름}
        password: {비밀번호}
        driver-class-name: {드라이버 클래스명}
        # 기타 데이터베이스 설정

3. 테스트 시나리오 작성하기

Cucumber에서는 기능(feature)과 시나리오(scenario)를 작성하여 테스트 케이스를 정의합니다. 테스트 시나리오를 작성하기 위해서는 .feature 확장자를 가진 파일을 생성하고, 다음과 같이 작성합니다.

Feature: 데이터베이스 테스트
    사용자는 데이터베이스에 대한 테스트를 수행할 수 있다.

    Scenario: 데이터 조회하기
        Given 데이터베이스에 사원 정보가 있다
        When 사용자는 사원 목록을 조회한다
        Then 조회된 사원 목록을 확인할 수 있다

4. 스텝(Step) 정의하기

시나리오의 각 단계에 대한 로직은 스텝으로 정의됩니다. Cucumber에서는 스텝을 Java로 구현합니다. 다음은 위의 시나리오를 구현하는 스텝의 예입니다.

import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.junit.Assert;

public class DatabaseTestSteps {

    @Given("데이터베이스에 사원 정보가 있다")
    public void 데이터베이스에_사원_정보가_있다() {
        // 테스트를 위한 데이터베이스 초기화 로직 작성
    }

    @When("사용자는 사원 목록을 조회한다")
    public void 사용자는_사원_목록을_조회한다() {
        // 사원 목록 조회 로직 작성
    }

    @Then("조회된 사원 목록을 확인할 수 있다")
    public void 조회된_사원_목록을_확인할_수_있다() {
        // 조회된 사원 목록 확인 로직 작성
        Assert.assertTrue(true);
    }
}

5. 테스트 실행하기

위의 스텝을 구현한 후, 테스트를 실행해보겠습니다. @RunWith(Cucumber.class) 어노테이션이 지정된 클래스를 만들고, 해당 클래스에서 Cucumber 테스트를 실행할 수 있습니다.

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

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "path/to/your/feature/file.feature",
    glue = "path.to.your.step.definitions",
    plugin = { "pretty", "html:target/cucumber-reports.html" }
)
public class DatabaseTestRunner {
}

테스트를 실행하기 위해 위와 같이 작성한 클래스를 실행하면, Cucumber는 스텝과 시나리오를 참고하여 테스트를 수행합니다.

위의 방법을 따라 Java Cucumber에서 데이터베이스 테스트를 실행할 수 있습니다. 자세한 내용은 Cucumber와 데이터베이스 라이브러리의 문서를 참고하시기 바랍니다.

참고 자료