오이 스프링 통합

1. 개요

Cucumber는 BDD (동작 중심 개발) 방법론을 따르는 Ruby 프로그래밍 언어로 작성된 매우 강력한 테스트 프레임 워크입니다. 이를 통해 개발자는 비 기술적 이해 관계자가 확인할 수있는 일반 텍스트로 고급 사용 사례를 작성하고 Gherkin이라는 언어로 작성된 실행 가능한 테스트로 전환 할 수 있습니다.

우리는 이미 다른 기사에서 이에 대해 논의했습니다.

그리고 Cucumber-Spring Integration은 테스트 자동화를 더 쉽게하기위한 것입니다. Cucumber 테스트가 Spring과 통합되면 Maven 빌드와 함께 실행할 수 있어야합니다.

2. Maven 종속성

Cucumber-JVM 종속성으로 시작하여 Maven 종속성을 정의하여 Cucumber-Spring 통합 사용을 시작하겠습니다.

 io.cucumber cucumber-java 6.8.0 test 

여기에서 최신 버전의 Cucumber JVM을 찾을 수 있습니다.

다음으로 JUnit 및 Cucumber 테스트 종속성을 추가합니다.

 io.cucumber cucumber-junit 6.8.0 test 

Cucumber JUnit의 최신 버전은 여기에서 찾을 수 있습니다.

마지막으로 Spring과 Cucumber 종속성 :

 io.cucumber cucumber-spring 6.8.0 test 

다시 말하지만, 여기에서 가장 최신 버전의 오이 스프링을 확인할 수 있습니다.

3. 구성

이제 Spring 애플리케이션에 Cucumber를 통합하는 방법을 살펴 보겠습니다.

먼저, Spring-Boot 애플리케이션 기사를 따라가는 Spring Boot 애플리케이션을 생성합니다. 그런 다음 Spring REST 서비스를 만들고 이에 대한 Cucumber 테스트를 작성합니다.

3.1. REST 컨트롤러

먼저 간단한 컨트롤러를 만들어 보겠습니다.

@RestController public class VersionController { @GetMapping("/version") public String getVersion() { return "1.0"; } }

3.2. 오이 단계 정의

JUnit으로 Cucumber 테스트를 실행하는 데 필요한 것은 @RunWith (Cucumber.class) 주석이있는 단일 빈 클래스를 만드는 것입니다 .

@RunWith(Cucumber.class) @CucumberOptions(features = "src/test/resources") public class CucumberIntegrationTest { }

기능 파일이라고도하는 Gherkin 파일의 위치를 ​​지정하는 @CucumberOptions 주석을 볼 수 있습니다 . 이 시점에서 Cucumber는 Gherkin 언어를 인식합니다. 소개에 언급 된 기사에서 Gherkin에 대해 더 많이 읽을 수 있습니다.

이제 Cucumber 기능 파일을 생성 해 보겠습니다.

Feature: the version can be retrieved Scenario: client makes call to GET /version When the client calls /version Then the client receives status code of 200 And the client receives server version 1.0

시나리오는 REST 서비스 URL / version에 대한 GET 호출을 작성 하고 응답을 확인하는 것입니다.

다음으로, 소위 글루 코드를 만들어야합니다. 단일 Gherkin 단계를 Java 코드와 연결하는 메소드입니다.

여기에 옵션이 있습니다. 주석 안에 Cucumber 표현식이나 정규 표현식을 사용할 수 있습니다. 우리의 경우 정규 표현식을 고수 할 것입니다.

@When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable{ executeGet("//localhost:8080/version"); } @Then("^the client receives status code of (\\d+)$") public void the_client_receives_status_code_of(int statusCode) throws Throwable { HttpStatus currentStatusCode = latestResponse.getTheResponse().getStatusCode(); assertThat("status code is incorrect : "+ latestResponse.getBody(), currentStatusCode.value(), is(statusCode)); } @And("^the client receives server version (.+)$") public void the_client_receives_server_version_body(String version) throws Throwable { assertThat(latestResponse.getBody(), is(version)); }

이제 Cucumber 테스트를 Spring Application Context와 통합 해 보겠습니다. 이를 위해 새 클래스를 만들고 @SpringBootTest@CucumberContextConfiguration으로 주석을 달 것입니다 .

@CucumberContextConfiguration @SpringBootTest public class SpringIntegrationTest { // executeGet implementation }

이제 모든 Cucumber 정의는 SpringIntegrationTest 를 확장하는 별도의 Java 클래스로 이동할 수 있습니다 .

public class StepDefs extends SpringIntegrationTest { @When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable { executeGet("//localhost:8080/version"); } }

우리는 이제 테스트 실행을 준비했습니다.

마지막으로, mvn clean install -Pintegration을 실행하여 명령 줄을 통해 빠른 실행을 수행 할 수 있습니다. Maven은 통합 테스트를 실행하고 콘솔에 결과를 표시합니다.

3 Scenarios ([32m3 passed[0m) 9 Steps ([32m9 passed[0m) 0m1.054s Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.283 sec - in com.baeldung.CucumberTest 2016-07-30 06:28:20.142 INFO 732 --- [Thread-2] AnnotationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext: startup date [Sat Jul 30 06:28:12 CDT 2016]; root of context hierarchy Results : Tests run: 12, Failures: 0, Errors: 0, Skipped: 0 

4. 결론

Cucumber를 Spring으로 구성하면 BDD 테스트에서 Spring 구성 구성 요소를 사용하는 것이 편리합니다. 이것은 Spring-Boot 애플리케이션에서 Cucumber 테스트를 통합하기위한 간단한 가이드입니다.

평소처럼이 자습서에 표시된 모든 코드 샘플은 GitHub에서 사용할 수 있습니다.