큐컴버는 BDD(Behavior-Driven Development)를 도와주는 도구입니다.
목차는 아래와 같습니다.
1. BDD란
2. BDD의 3가지 프로세스
3. Cucumber란
4. 실제 사용 코드 예시
우선 BDD라는 용어를 처음 듣는 분들을 위해서…!
소프트웨어 팀에서 일을 할 때, 개발자와 비개발자 사이의 갭(Gap)을 줄여주는 방법입니다.
BDD는 3가지 단계로 반복합니다.
BDD에서는 이 세 가지를 Discovery, Formulation, Automation이라고 부릅니다.
그리고 이렇게 만들어진 문서들은 빠르고 자신 있게 시스템을 바꿀 수 있는 틀이 됩니다.
또한 처음 팀에 들어온 사람들도 쉽게 도메인에 대해 이해할 수 있죠!
BDD에 대해 더 자세한 내용은 여기를 참조해주세요.
위에서 살펴본 내용을 정리해보면,
애자일 방식으로 일하는 팀에서 이해의 싱크, 더 빠른 피드백 등을 도와주는 것이 BDD 방법론입니다.
그리고 그 BDD를 실현해주는 도구 중 하나가 Cucumber 입니다.
Scenario: 참가자가 퀴즈를 맞춘다
Given 참가자가 문제를 골랐을 때
When 참가자가 답을 고르면
Then 출제자가 정답이 맞는지 알려준다
유저 스토리는 Scenario
선행 조건은 Given
검증하려는 행위는 When
검증 구문은 Then
이렇게 개발자, 비개발자 모두가 쉽게 읽을 수 있는 문서를 만들 수 있습니다.
그리고 저 문서는 자동화된 테스트 도구로써 소프트웨어가 잘 동작하는지 테스트도 할 수 있죠!
Cucumber를 구성하는 요소에는 Gherkin
과 Step Definition
이 있습니다.
위와 같이 순수 문서(Plain text)로 만들 수 있게 해주는 문법을 Gherkin이라고 합니다.
.feature
확장자의 텍스트 파일에 저장돼있고 보통 소프트웨어의 VCS에서 같이 관리됩니다.순수 문서인 Gherkin 문서와 실제 테스트 코드 간을 연결시켜주는 중간 단계인 Step Definition이 있습니다.
@Given("참가자가 {long}번 문제를 골랐을 때")
fun pickProblem(problemId: Long) {
context.invokeHttpPost("/problems/$problemId")
}
큐컴버용 sourceSet 지정
큐컴버 의존성 추가
gradle task 선언
이런 식으로 Gherkin 문법을 따른 .feature
파일들이 resources 내부에 존재
이런 느낌입니다.
각 Step에서 사용하기 위한 Context 클래스가 있습니다.
API 호출 메서드, 응답값 저장, 그 외의 상태 저장 역할을 합니다.
Context 객체를 사용해서 Step Definition
을 구현합니다.
Gherkin
문법을 따르는 어노테이션(@Given 등)과 코드 레벨의 행위를 구현해둡니다.
(도커를 띄워두지 않아서 실패하는 모습…)
위와 같이 각 유저 시나리오에 대해서 인수테스트를 진행합니다.
큐컴버 공식 문서 - Introduction - Cucumber Documentation
우아한테크코스 prolog - prolog/backend/src/acceptanceTest at main · woowacourse/prolog