SlideShare una empresa de Scribd logo
1 de 110
Descargar para leer sin conexión
The Cucumber for Java
이종화 (axle.g2ek@gmail.com)
목차
 BDD
 Acceptance Criteria
 What is The Cucumber
 Gherkin Basics
 10 Minute Tutorial
 Spring with Cucumber
 Continuous Build
 Appendix
22
1. Behavior Driven Development
The Cucumber for Java
3
What is BDD?
44
What is BDD?
55
BDD defined
66
 잘 정의된 상태와 상호 작용하는 주기를 설명하며, 중요한
작동 테스트를 거친 SW 를 제공한다
 outside-in
 pull-based
 multiple stakeholder
 multiple scale,
 high automation
 agile methodology
https://en.wikipedia.org/wiki/Behavior-driven_development
The power of “should”
77
 개발에 완성도를 위한 사용자 관점의 테스트
 “Should it really?” 라고 묻도록 독려
 삼각 측량에 따른 제품 완성도 함양
 구현 결함
 충족된 구현의 이상 반응
 요구사항에 결함
 발생 가능한 요구사항 도출의 결여
Example mapping
88
How does BDD help?
99
 모두가 함께 명세와 비즈니스 가치 도출 필요
 모두가 이해할 수 ubiquitous language 로 작성
 자동화 할 수 있는 acceptance test 로 전환하기
 지속적인 빌드를 통한 테스트
 모두가 이해할 수 있는 가독성 있는 문서화 도출
 Living Documentation
10
2. Acceptance Criteria
The Cucumber for Java
11
올바른 제품을 올바른 방법으로 만들고 있는가?
1212
ACCEPTANCE CRITERIA
 사용자, 고객 또는 시스템 수준의 충족되어야 하는 조건
 기능 및 비기능적 요구사항에 대한 명확한 통과/실패 결과
 인수 기준은 모든 사람이 이해할 수 있는
 사용자 스토리에 대한 시나리오
 작업의 독립적인 완료 기준 (What. Not How)
 테스트 (현실적인 예제 기반)
 기능에 대한 명세
 긴밀한 협업 지향
 명확한 검토를 통한 개발
 신뢰와 확신 구축
 고객 중심의 개발
 유비쿼터스 랭기지를 통한 공통의 이해 촉진
1313
인수 기준은 언제 작성할 것인가?
1414
ATDD
 인수 테스트 주도 개발
 고객의 요구사항에 대한 자동화된 실행 가능한 인수 테스트
지향
 요구사항 및 기능 완료의 지표
 효과적인 협업을 위한 실천법 (업무 관계자간 긴밀한 협력 촉진)
1515
ATDD
 Cycle
 Step 1: Pick a user story
 Step 2: Write tests for a story
 Step 3: Automate the tests
 Step 4: Implement the functionality
1616
ATDD
 TDD vs. ATDD
 TDD는 how 관점에서 소프트웨어 내부 품질 향상을 도모한다.
 ATDD는 what 관점에서 사용자(외부) 품질 향상을 도모한다.
1717
ATDD
1818
이해관계자와 같은 언어로
소통할 수 있는 지점 개발자끼리 노는 곳
ATDD
1919
20
3. What is Cucumber
The Cucumber for Java
21
22
2323
Cucumber is a tool that supports Behaviour-Driven
Development(BDD)
Write features in plain text
Validates that the software does what those specifications say
Business readable DSL
2424
2525
26
Cucumber
What to do
System Behavior
Specification
Unit Test
How to do
Module / Design
Implementation
with
test for
27
Business facing
Features
Scenarios
Steps
Technology facing
Step definitions
Support code
Cucumber
What is Cucumber?
2828
 시나리오에는 Step 목록이
존재하며 이를 통해
테스트를 수행한다.
 Cucumber 시나리오를
이해하기 위해서는 기본
문법과 규칙을 사용해야
하며 이를 Gherkin 이라
부른다.
 Plan text
 Table
29
How Cucumber Works The main layers of a Cucumber test suite
30
What is Cucumber?
3131
 Cucumber 상태
 Failed : 실패
 Pending : step 정의는 되었으나 구현부 없음
 Undefined : step이 정의되지 않음 (자바 step 코드 없음)
 Skipped : 건너뜀
 Passed : 통과(합격)
What is Gherkin?
3232
What is Gherkin?
3333
What is Gherkin?
3434
What is Gherkin?
35
 Unambiguous executable
specification
 Automated testing using
Cucumber
 Document how the
system actually behaves
삼각 측량을 통해 케이스 별 시나리오/스텝 구성
What is Gherkin?
3636
 Primary keywords
 Feature
 Background
 Scenario
 Given
 When
 Then
 And
 But
 *
 Scenario Outline
 Examples
 Secondary keywords
 """ (Doc Strings)
 | (Data Tables)
 @ (Tags)
 # (Comments)
Feature 제목
기능에 대한 설명
(사용자 스토리)
Test 실행과는 무관한 문서 요소
기능에 대한 시나리오로 다수의
step 으로 구성되며 테스트로 실행
37
4. Gherkin Basics
The Cucumber for Java
38
Feature
 소프트웨어 기능에 대한 상위 수준의 설명을 제공하고 관련
시나리오를 그룹화한다.
 첫 번째 기본 키워드는 기능을 명시한다.
 그 다음에는 기능을 설명하는 요약 정보를 명시한다.
 테스트에 영향을 주지 않지만 Cucumber Report 에 사용된다.
 파일명은 snake case 로 하는게 관례적 이다.
 user_log_in.feature
 Gherkin은 검증 시 다음의 하나는 필수적으로 명시되었는지 체크 한다.
 Scenario
 Background
 Scenario Outline
3939
Scenario
4040
 원하는 동작을 표현하기 위해 각 기능에 몇 가지 시나리오가 포함된다.
 시나리오 이름만 사용하면 혼동을 일으킬 수 있다.
 명확한 설명이 필요하고 문서화 되므로 명세화 해야 한다.
 각 시나리오는 특정 상황에서 시스템이 어떻게 동작해야 하는지 보여주는 하나의
구체적인 예이다.
 모든 시나리오에서 정의된 동작을 함께 추가하면 기능 자체의 예상 동작이 된다.
 컨텍스트로 시작해서, 계속해서 어떤 행동을 실행하고, 마지막으로 결과가 기대했던
것인지 확인한다. 각각의 시나리오는 시스템이 해야 하는 것을 묘사하는 작은
이야기를 한다.
 주요 패턴
 시스템을 특정 상태로 만든다
 상태를 수행한다
 상태를 확인한다
 각 시나리오는 타당해야 하며 다른 시나리오와 독립적으로 실행되어야 한다.
상태를 전이하는 시나리오는 지양하라.
41
Scenario
4242
Take Care with Your Naming Scenarios
시나리오 네이밍 정의는 놀랍게도 매우 중요하다.
테스트가 실패하면 무엇이 실패 했는지에 대한 헤드라인 정보를 제공하는 것이 실패
시나리오의 네이밍이다. 간결하고 표현력 있는 네이밍을 사용하면 모든 사람의 시간을
절약할 수 있다.
네이밍이 올바르다면 그것이 무엇을 하는지 알아내기 위해 내부 코드를 읽을 필요가
없다.
시스템이 진화함에 따라 이해 관계자는 기존 시나리오에서 예상되는 동작을 변경해 달
라는 요청을 자주하게 된다. 잘 정의된 시나리오 네이밍은 추가적인 단계 또는 단계를
수정하더라도 여전히 의미가 있다.
Steps - Given
 시스템의 초기 컨텍스트인 시나리오의 장면을 가정하는 단계이다.
 Cucumber가 Given 단계를 실행 할 때 작성 및 구성 또는 Test DB에
data 추가와 같은 잘 정의된 상태로 시스템을 구성한다.
 사용자(또는 외부 시스템)가 시스템과 상호 작용하기 전에 시스템을
컨텍스트 상태로 전환하는 것이 목적이다.
4343
Steps – When
 이벤트 실행 또는 설명하는 단계이다.
 시나리오마다 하나의 단계만 수행하는 것이 좋다.
 추가할 필요가 있다고 느끼면 시나리오를 여러 개로 나눠야 한다는
신호이다.
4444
Steps – Then
 기대 결과 또는 결과를 설명하는 단계이다.
 실제 결과를 기대 결과와 비교하기 위해 assertion 을 사용한다.
4545
Steps – And, But
 Cucumber는 And, But 키워드 자체를 활용하지 않는다.
 단지 이전 단계를 보조해 주는 역할을 한다.
 즉, Step의 가독성을 주기 위해 도움을 주는 옵션이다.
4646
Steps – And, But
4747
=
Steps – *
4848
 Given, When, Then, And, But 이 장황하다고 여기는 사람도 있다.
(설마~ ㅋㅋ)
 이때는 *(별표)를 이용할 수 있다.
 단, 편의성은 있지만 가독성은 포기해야 한다.
Background
 반복은 주의를 산만하게 하고, 각 Scenario 가 테스트하는
것에 대한 의도를 탁하게 만든다.
 Background 섹션을 사용하여 모든 Scenario 의 공통적인
step 집합을 중복없이 컨텍스트화 할 수 있다.
 Background 는 각 Scenario 시작 전에 실행되므로 첫 번째
Scenario 이전에 기술한다.
 Feature 당 Background 는 하나여야 한다. 다른 Scenario
에 대해 다른 Background 가 필요하다면 Feature 를
분리해야 한다는 신호이다.
4949
Background
5050
Background
5151
Background
5252
Background Tip!
• 실제로 알아야 할 인수 정보가 아니라면 Background 사용을 지양하라.
• Background 를 간결하게 작성하고 눈에 띄게 만들어라.
• 사람들은 이를 주의 깊게 기억하는데 도움이 되어야 한다.
• 네 줄 이상이면 한 두 단계로 표현할 수 있는 방법을 찾아봐라.
• Scenario 가 많아 기반 화면을 초과하여 스크롤 될 경우 Background 에서 무슨 일이
일어났는지에 대한 전체 개요를 인지하기 어려워진다. Feature 를 분할하는 것에
대해 생각해 봐라.
Scenario Outline
 다른 동일 Scenario 를 여러 번 실행하는 데 사용.
 Scenario 를 복사하여 붙여 넣어 서로 다른 값을 사용하는
것은 중복이다.
 Examples 섹션을 포함해야 한다.
 표의 헤더를 참조하는 <> 구분 매개 변수를 사용
 파라미터를 표의 값으로 대체
 일반적인 데이터 표는 단일 Scenario 의 단계에 첨부할
데이터 묶음이다.
 내부적으로 다수의 Scenario 로 실행함
5353
Scenario Outline
5454
Scenario Outline
5555
Scenario Outline
5656
 MULTIPLE TABLES OF EXAMPLES (Scenario 도 가능)
 Scenario Outline 의 수많은 예제 항목을 처리할 수 있다.
 다양한 유형의 예제를 그룹화하여 가독성을 높일 수 있다.
Step Arguments
5757
 Doc Strings
 큰 크기의 텍스트를 단계 정의로 전달하는 데 유용
 텍스트는 step 자체 라인에 세 개의 이중 인용 부호로 감싸서 표현
 Step 정의에서 이 텍스트를 패턴에 반영시킬 필요는 없다. 이 값은 마지막
인수로 자동 전달된다.
Step Arguments
5858
 String Transformations
 String 이 아닌 다른 객체로 받으려는 경우
 int, long, date, calendar 등 일반적인 객체 기본 지원
 @Transform 어노테이션을 사용하여 직접 변환하는 경우
Step Arguments
5959
 Data Tables
 값 목록을 step 정의로 전달하는 데 유용
 Doc Strings 와 마찬가지로 step 정의에 마지막 인수로 전달
 Data Table API 제공
60
61
62
63
How Many Examples Should I Use?
• 현실적인 주요 예제를 대상으로 하는 것이 가독성과 인수 조건에 부합한다.
다양하고 많은 예제로 검증하고자 하는 바램이 있겠으나 단위/통합 테스트에서 처리
하는 것이 이상적이다.
• 버그가 없다는 것을 인수 테스트에서 증명할 수 없다는 것을 기억하라.
증거의 부재는 부재의 증거가 아닌 무엇을 의도하고 목적을 어디에 두는 것이냐가
핵심이다!
• 가독성 이라는 것을 기억하고 너무 멀리가지 말고 항상 사람들과 정기적으로 읽고
피드백을 상호 교류하여 정련해야 한다.
Step Arguments
6464
 @(Tags)
 태그를 사용하여 Feature, Scenario 에 레이블을 부착할 수 있다
 관련한 도메인 컨텍스트를 분류하여 탐색 및 가독성을 증진한다
 Cucumber 실행 시에도 태그 단위로 제어할 수 있다
65
66
5. 10 Minute Tutorial
The Cucumber for Java
67
Progress
6868
http://docs.cucumber.io/guides/10-minute-tutorial/
 Create Cucumber project
 Write a Scenario
 Feature 작성
 Scenario 작성
 Step 작성
 Create Step dummy class
 Given-When-Then method
 Fail & Pass
 Step by step test to pass
Create Cucumber project
mvn archetype:generate 
-DarchetypeGroupId=io.cucumber 
-DarchetypeArtifactId=cucumber-archetype 
-DarchetypeVersion=2.3.1.2 
-DgroupId=hellocucumber 
-DartifactId=hellocucumber 
-Dpackage=hellocucumber 
-Dversion=1.0.0-SNAPSHOT 
-DinteractiveMode=false
6969
Create Cucumber project
Open the project in IntelliJ IDEA:
7070
Verify Cucumber installation
7171
Write a Scenario
7272
Feature: 벌써 금요일 인가요?
모두가 금요일이 언제인지 알고 싶어합니다.
Scenario: 일요일은 금요일이 아니다.
Given 오늘은 일요일 이다.
When 오늘이 금요일 인지 묻는다.
Then 나는 "아니요." 라고 말합니다.
src/test/resources/hellocucumber/is_it_friday_yet.featu
re
See Scenario reported as undefined
7373
See Scenario reported as undefined
7474
See Scenario reported as undefined
7575
src/test/java/hellocucumber/Stepdefs.java
See scenario reported as pending
7676
See scenario reported as failing
7777
See scenario reported as failing
7878
See scenario reported as passing
7979
Dry Run
8080
dryRun 을 통해 Feature 실행없이 스텝 정의를 검증할 수 있다.
Test Automation Is Software Development
8181
 Scenario 를 통해 System Under Test 를 보았다.
 테스트와 소프트웨어 설계는 상호 보완적인 기술이며, 강한
팀은 두 전문성을 모두 갖추고 협력해야 한다.
6. Spring with Cucumber
The Cucumber for Java
82
Cucumber-Spring
8383
Maven dependency
8484
Java8 lambda
연동
JUnit 연동
Spring 연동
2018.7월 기준 Java 8 까지만 대응 중.
cucumber.version 은 2.4.0 권장. (3 버전 연동 오류 있음)
IntelliJ 2018 권장. (plugin 이슈 있음)
JUnit 은 4.11 이상 권장. (이하 버전 연동 오류 있음)
Create Feature
8585
Create Step
8686
87
88
Run with Cucumber-spring
8989
전체 Cucumber Feature 를 실행하기 위한 클래스.
Cucumber Repor 를 만드는데 사용하기 위함.
7. Continuous Build
The Cucumber for Java
90
Publish pretty cucumber reports on Jenkins
9191
 Get Jenkins
 Install the Cucumber Reports plugin
 Restart Jenkins
Publish pretty cucumber reports on Jenkins
9292
 Job Configuration
 Post-build Actions 를 통해 Cucumber reports 플로그인 추가
93
94
95
96
97
8. Appendix
The Cucumber for Java
98
Top 5 Cucumber Best Practices
9999
https://blog.codeship.com/cucumber-best-practices/
1. 선언적 Feature 를 작성하라.
scenario 는 사용자 관점에서 설명 될 수 있도록 작성한다.
링크를 클릭하고 양식 필드를 채우거나 코드 또는 CSS 선택 등이 포함된
실행
또는 내부 처리 관점의 설명이 아니다.
도메인 관점의 간결 명료한 선언적 feature 를 만들어야 한다.
Top 5 Cucumber Best Practices
100100
2. 내레이션으로 기술하라.
내레이션은 한 문장에서 기능이 무엇인지 설명한다.
이는 사용자 관점에서 도메인 이해 및 기능 자체가 필요한 역할을 설명하는
데
이점이 있다. 즉, 왜 처음에 이 기능을 구현 하는지를 이해 하는 데 중요
도움을
준다. 또한 기능에 대한 간략한 개요를 제공하므로 시나리오를 읽지 않고
다른
사람들이 대략적인 내용을 이해할 수 있다.
Top 5 Cucumber Best Practices
101101
3. 결합된 동작의 단일 Step 을 피하라.
결합 된 두 가지 동작이 포함 된 단일 단계가 발생하면 “And” 를 사용하여
두 단계로 나줘야 한다.
이는 한 단계 당 하나의 작업을 수행하는 것이 명확한 이해와 함께 단계
구현을
모듈화 하여 재사용 가능성이 높아진다.
Top 5 Cucumber Best Practices
102102
4. Step 정의를 재사용 하라.
Cucumber 에서는 Step 을 재사용 할 수 있다.
이는 다른 Step 의 동작을 확장하거나 여러 단계로 구성된 우수한 동작을
정의 할 때 편리하다.
이렇게 하면 유지 보수성이 향상되어 특정 동작을 변경해야하는 경우
단일 Step 정의만 변경하면 된다.
Top 5 Cucumber Best Practices
103103
5. Background 사용을 현명하게 사용하라.
모든 Scenario 를 시작할 때 동일한 Step 과정을 사용하는 경우
Background 를 배치하라.
단, 너무 길면 Scenario 가독성에 저해가 될 수 있으므로 너무 많은
Step 을 거치지 않도록 조심한다.
Write Great Cucumber Tests
104104
https://saucelabs.com/blog/write-great-cucumber-tests
Scenario and Step Definition Best Practices - Cucumber
105105
https://www.linkedin.com/pulse/scenario-step-definition-best-practices-
cucumber-dilshan-fernando
15 EXPERT TIPS FOR USING CUCUMBER
106106
https://www.engineyard.com/blog/15-expert-tips-for-using-cucumber
9 tips for improving Cucumber test readability
107107
https://www.foreach.be/blog/9-tips-improving-cucumber-test-readability
References
108108
 https://cucumber.io/
 The Cucumber for Java Book
 BDD IN ACTION
 ATDD BY EXAMPLE
 Specification By Example
 https://www.slideshare.net/oddpoet/cucumber-
jvm
109109
Q&A
110110
Thanks for
reading

Más contenido relacionado

La actualidad más candente

테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드SangIn Choung
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 SangIn Choung
 
구글테스트
구글테스트구글테스트
구글테스트진화 손
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)SangIn Choung
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법SangIn Choung
 
(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플SangIn Choung
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
API Test Automation using Karate.pdf
API Test Automation using Karate.pdfAPI Test Automation using Karate.pdf
API Test Automation using Karate.pdfVenessa Serrao
 
Dev labs alliance top 50 selenium interview questions for SDET
Dev labs alliance top 50 selenium interview questions for SDETDev labs alliance top 50 selenium interview questions for SDET
Dev labs alliance top 50 selenium interview questions for SDETdevlabsalliance
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingRoman Liubun
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다KWON JUNHYEOK
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101정주 김
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델KU HUISEONG
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool재연 김
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 

La actualidad más candente (20)

테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드
 
Selenium-Locators
Selenium-LocatorsSelenium-Locators
Selenium-Locators
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
구글테스트
구글테스트구글테스트
구글테스트
 
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
사용자 스토리 대상 테스트 설계 사례(테스트기본교육 3장 3절)
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법발표자료 1인qa로살아남는6가지방법
발표자료 1인qa로살아남는6가지방법
 
(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플(애자일) 테스트 계획서 샘플
(애자일) 테스트 계획서 샘플
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
API Test Automation using Karate.pdf
API Test Automation using Karate.pdfAPI Test Automation using Karate.pdf
API Test Automation using Karate.pdf
 
Dev labs alliance top 50 selenium interview questions for SDET
Dev labs alliance top 50 selenium interview questions for SDETDev labs alliance top 50 selenium interview questions for SDET
Dev labs alliance top 50 selenium interview questions for SDET
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testing
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
 
파이썬 TDD 101
파이썬 TDD 101파이썬 TDD 101
파이썬 TDD 101
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
Introduce Katalon tool
Introduce Katalon toolIntroduce Katalon tool
Introduce Katalon tool
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 

Similar a The Cucumber for Java

Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략KTH, 케이티하이텔
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringSuwon Chae
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사효원 강
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기Mijeong Park
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션SangIn Choung
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 

Similar a The Cucumber for Java (20)

Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
[H3 2012] 스마트모바일 환경에서의 App.품질관리전략
 
The Introduction to Refactoring
The Introduction to Refactoring The Introduction to Refactoring
The Introduction to Refactoring
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사X unittestpattern 1장_아꿈사
X unittestpattern 1장_아꿈사
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 

The Cucumber for Java

  • 1. The Cucumber for Java 이종화 (axle.g2ek@gmail.com)
  • 2. 목차  BDD  Acceptance Criteria  What is The Cucumber  Gherkin Basics  10 Minute Tutorial  Spring with Cucumber  Continuous Build  Appendix 22
  • 3. 1. Behavior Driven Development The Cucumber for Java 3
  • 6. BDD defined 66  잘 정의된 상태와 상호 작용하는 주기를 설명하며, 중요한 작동 테스트를 거친 SW 를 제공한다  outside-in  pull-based  multiple stakeholder  multiple scale,  high automation  agile methodology https://en.wikipedia.org/wiki/Behavior-driven_development
  • 7. The power of “should” 77  개발에 완성도를 위한 사용자 관점의 테스트  “Should it really?” 라고 묻도록 독려  삼각 측량에 따른 제품 완성도 함양  구현 결함  충족된 구현의 이상 반응  요구사항에 결함  발생 가능한 요구사항 도출의 결여
  • 9. How does BDD help? 99  모두가 함께 명세와 비즈니스 가치 도출 필요  모두가 이해할 수 ubiquitous language 로 작성  자동화 할 수 있는 acceptance test 로 전환하기  지속적인 빌드를 통한 테스트  모두가 이해할 수 있는 가독성 있는 문서화 도출  Living Documentation
  • 10. 10
  • 11. 2. Acceptance Criteria The Cucumber for Java 11
  • 12. 올바른 제품을 올바른 방법으로 만들고 있는가? 1212
  • 13. ACCEPTANCE CRITERIA  사용자, 고객 또는 시스템 수준의 충족되어야 하는 조건  기능 및 비기능적 요구사항에 대한 명확한 통과/실패 결과  인수 기준은 모든 사람이 이해할 수 있는  사용자 스토리에 대한 시나리오  작업의 독립적인 완료 기준 (What. Not How)  테스트 (현실적인 예제 기반)  기능에 대한 명세  긴밀한 협업 지향  명확한 검토를 통한 개발  신뢰와 확신 구축  고객 중심의 개발  유비쿼터스 랭기지를 통한 공통의 이해 촉진 1313
  • 14. 인수 기준은 언제 작성할 것인가? 1414
  • 15. ATDD  인수 테스트 주도 개발  고객의 요구사항에 대한 자동화된 실행 가능한 인수 테스트 지향  요구사항 및 기능 완료의 지표  효과적인 협업을 위한 실천법 (업무 관계자간 긴밀한 협력 촉진) 1515
  • 16. ATDD  Cycle  Step 1: Pick a user story  Step 2: Write tests for a story  Step 3: Automate the tests  Step 4: Implement the functionality 1616
  • 17. ATDD  TDD vs. ATDD  TDD는 how 관점에서 소프트웨어 내부 품질 향상을 도모한다.  ATDD는 what 관점에서 사용자(외부) 품질 향상을 도모한다. 1717
  • 18. ATDD 1818 이해관계자와 같은 언어로 소통할 수 있는 지점 개발자끼리 노는 곳
  • 20. 20
  • 21. 3. What is Cucumber The Cucumber for Java 21
  • 22. 22
  • 23. 2323 Cucumber is a tool that supports Behaviour-Driven Development(BDD) Write features in plain text Validates that the software does what those specifications say Business readable DSL
  • 24. 2424
  • 25. 2525
  • 26. 26 Cucumber What to do System Behavior Specification Unit Test How to do Module / Design Implementation with test for
  • 28. What is Cucumber? 2828  시나리오에는 Step 목록이 존재하며 이를 통해 테스트를 수행한다.  Cucumber 시나리오를 이해하기 위해서는 기본 문법과 규칙을 사용해야 하며 이를 Gherkin 이라 부른다.  Plan text  Table
  • 29. 29 How Cucumber Works The main layers of a Cucumber test suite
  • 30. 30
  • 31. What is Cucumber? 3131  Cucumber 상태  Failed : 실패  Pending : step 정의는 되었으나 구현부 없음  Undefined : step이 정의되지 않음 (자바 step 코드 없음)  Skipped : 건너뜀  Passed : 통과(합격)
  • 35. What is Gherkin? 35  Unambiguous executable specification  Automated testing using Cucumber  Document how the system actually behaves 삼각 측량을 통해 케이스 별 시나리오/스텝 구성
  • 36. What is Gherkin? 3636  Primary keywords  Feature  Background  Scenario  Given  When  Then  And  But  *  Scenario Outline  Examples  Secondary keywords  """ (Doc Strings)  | (Data Tables)  @ (Tags)  # (Comments) Feature 제목 기능에 대한 설명 (사용자 스토리) Test 실행과는 무관한 문서 요소 기능에 대한 시나리오로 다수의 step 으로 구성되며 테스트로 실행
  • 37. 37
  • 38. 4. Gherkin Basics The Cucumber for Java 38
  • 39. Feature  소프트웨어 기능에 대한 상위 수준의 설명을 제공하고 관련 시나리오를 그룹화한다.  첫 번째 기본 키워드는 기능을 명시한다.  그 다음에는 기능을 설명하는 요약 정보를 명시한다.  테스트에 영향을 주지 않지만 Cucumber Report 에 사용된다.  파일명은 snake case 로 하는게 관례적 이다.  user_log_in.feature  Gherkin은 검증 시 다음의 하나는 필수적으로 명시되었는지 체크 한다.  Scenario  Background  Scenario Outline 3939
  • 40. Scenario 4040  원하는 동작을 표현하기 위해 각 기능에 몇 가지 시나리오가 포함된다.  시나리오 이름만 사용하면 혼동을 일으킬 수 있다.  명확한 설명이 필요하고 문서화 되므로 명세화 해야 한다.  각 시나리오는 특정 상황에서 시스템이 어떻게 동작해야 하는지 보여주는 하나의 구체적인 예이다.  모든 시나리오에서 정의된 동작을 함께 추가하면 기능 자체의 예상 동작이 된다.  컨텍스트로 시작해서, 계속해서 어떤 행동을 실행하고, 마지막으로 결과가 기대했던 것인지 확인한다. 각각의 시나리오는 시스템이 해야 하는 것을 묘사하는 작은 이야기를 한다.  주요 패턴  시스템을 특정 상태로 만든다  상태를 수행한다  상태를 확인한다  각 시나리오는 타당해야 하며 다른 시나리오와 독립적으로 실행되어야 한다. 상태를 전이하는 시나리오는 지양하라.
  • 41. 41
  • 42. Scenario 4242 Take Care with Your Naming Scenarios 시나리오 네이밍 정의는 놀랍게도 매우 중요하다. 테스트가 실패하면 무엇이 실패 했는지에 대한 헤드라인 정보를 제공하는 것이 실패 시나리오의 네이밍이다. 간결하고 표현력 있는 네이밍을 사용하면 모든 사람의 시간을 절약할 수 있다. 네이밍이 올바르다면 그것이 무엇을 하는지 알아내기 위해 내부 코드를 읽을 필요가 없다. 시스템이 진화함에 따라 이해 관계자는 기존 시나리오에서 예상되는 동작을 변경해 달 라는 요청을 자주하게 된다. 잘 정의된 시나리오 네이밍은 추가적인 단계 또는 단계를 수정하더라도 여전히 의미가 있다.
  • 43. Steps - Given  시스템의 초기 컨텍스트인 시나리오의 장면을 가정하는 단계이다.  Cucumber가 Given 단계를 실행 할 때 작성 및 구성 또는 Test DB에 data 추가와 같은 잘 정의된 상태로 시스템을 구성한다.  사용자(또는 외부 시스템)가 시스템과 상호 작용하기 전에 시스템을 컨텍스트 상태로 전환하는 것이 목적이다. 4343
  • 44. Steps – When  이벤트 실행 또는 설명하는 단계이다.  시나리오마다 하나의 단계만 수행하는 것이 좋다.  추가할 필요가 있다고 느끼면 시나리오를 여러 개로 나눠야 한다는 신호이다. 4444
  • 45. Steps – Then  기대 결과 또는 결과를 설명하는 단계이다.  실제 결과를 기대 결과와 비교하기 위해 assertion 을 사용한다. 4545
  • 46. Steps – And, But  Cucumber는 And, But 키워드 자체를 활용하지 않는다.  단지 이전 단계를 보조해 주는 역할을 한다.  즉, Step의 가독성을 주기 위해 도움을 주는 옵션이다. 4646
  • 47. Steps – And, But 4747 =
  • 48. Steps – * 4848  Given, When, Then, And, But 이 장황하다고 여기는 사람도 있다. (설마~ ㅋㅋ)  이때는 *(별표)를 이용할 수 있다.  단, 편의성은 있지만 가독성은 포기해야 한다.
  • 49. Background  반복은 주의를 산만하게 하고, 각 Scenario 가 테스트하는 것에 대한 의도를 탁하게 만든다.  Background 섹션을 사용하여 모든 Scenario 의 공통적인 step 집합을 중복없이 컨텍스트화 할 수 있다.  Background 는 각 Scenario 시작 전에 실행되므로 첫 번째 Scenario 이전에 기술한다.  Feature 당 Background 는 하나여야 한다. 다른 Scenario 에 대해 다른 Background 가 필요하다면 Feature 를 분리해야 한다는 신호이다. 4949
  • 52. Background 5252 Background Tip! • 실제로 알아야 할 인수 정보가 아니라면 Background 사용을 지양하라. • Background 를 간결하게 작성하고 눈에 띄게 만들어라. • 사람들은 이를 주의 깊게 기억하는데 도움이 되어야 한다. • 네 줄 이상이면 한 두 단계로 표현할 수 있는 방법을 찾아봐라. • Scenario 가 많아 기반 화면을 초과하여 스크롤 될 경우 Background 에서 무슨 일이 일어났는지에 대한 전체 개요를 인지하기 어려워진다. Feature 를 분할하는 것에 대해 생각해 봐라.
  • 53. Scenario Outline  다른 동일 Scenario 를 여러 번 실행하는 데 사용.  Scenario 를 복사하여 붙여 넣어 서로 다른 값을 사용하는 것은 중복이다.  Examples 섹션을 포함해야 한다.  표의 헤더를 참조하는 <> 구분 매개 변수를 사용  파라미터를 표의 값으로 대체  일반적인 데이터 표는 단일 Scenario 의 단계에 첨부할 데이터 묶음이다.  내부적으로 다수의 Scenario 로 실행함 5353
  • 56. Scenario Outline 5656  MULTIPLE TABLES OF EXAMPLES (Scenario 도 가능)  Scenario Outline 의 수많은 예제 항목을 처리할 수 있다.  다양한 유형의 예제를 그룹화하여 가독성을 높일 수 있다.
  • 57. Step Arguments 5757  Doc Strings  큰 크기의 텍스트를 단계 정의로 전달하는 데 유용  텍스트는 step 자체 라인에 세 개의 이중 인용 부호로 감싸서 표현  Step 정의에서 이 텍스트를 패턴에 반영시킬 필요는 없다. 이 값은 마지막 인수로 자동 전달된다.
  • 58. Step Arguments 5858  String Transformations  String 이 아닌 다른 객체로 받으려는 경우  int, long, date, calendar 등 일반적인 객체 기본 지원  @Transform 어노테이션을 사용하여 직접 변환하는 경우
  • 59. Step Arguments 5959  Data Tables  값 목록을 step 정의로 전달하는 데 유용  Doc Strings 와 마찬가지로 step 정의에 마지막 인수로 전달  Data Table API 제공
  • 60. 60
  • 61. 61
  • 62. 62
  • 63. 63 How Many Examples Should I Use? • 현실적인 주요 예제를 대상으로 하는 것이 가독성과 인수 조건에 부합한다. 다양하고 많은 예제로 검증하고자 하는 바램이 있겠으나 단위/통합 테스트에서 처리 하는 것이 이상적이다. • 버그가 없다는 것을 인수 테스트에서 증명할 수 없다는 것을 기억하라. 증거의 부재는 부재의 증거가 아닌 무엇을 의도하고 목적을 어디에 두는 것이냐가 핵심이다! • 가독성 이라는 것을 기억하고 너무 멀리가지 말고 항상 사람들과 정기적으로 읽고 피드백을 상호 교류하여 정련해야 한다.
  • 64. Step Arguments 6464  @(Tags)  태그를 사용하여 Feature, Scenario 에 레이블을 부착할 수 있다  관련한 도메인 컨텍스트를 분류하여 탐색 및 가독성을 증진한다  Cucumber 실행 시에도 태그 단위로 제어할 수 있다
  • 65. 65
  • 66. 66
  • 67. 5. 10 Minute Tutorial The Cucumber for Java 67
  • 68. Progress 6868 http://docs.cucumber.io/guides/10-minute-tutorial/  Create Cucumber project  Write a Scenario  Feature 작성  Scenario 작성  Step 작성  Create Step dummy class  Given-When-Then method  Fail & Pass  Step by step test to pass
  • 69. Create Cucumber project mvn archetype:generate -DarchetypeGroupId=io.cucumber -DarchetypeArtifactId=cucumber-archetype -DarchetypeVersion=2.3.1.2 -DgroupId=hellocucumber -DartifactId=hellocucumber -Dpackage=hellocucumber -Dversion=1.0.0-SNAPSHOT -DinteractiveMode=false 6969
  • 70. Create Cucumber project Open the project in IntelliJ IDEA: 7070
  • 72. Write a Scenario 7272 Feature: 벌써 금요일 인가요? 모두가 금요일이 언제인지 알고 싶어합니다. Scenario: 일요일은 금요일이 아니다. Given 오늘은 일요일 이다. When 오늘이 금요일 인지 묻는다. Then 나는 "아니요." 라고 말합니다. src/test/resources/hellocucumber/is_it_friday_yet.featu re
  • 73. See Scenario reported as undefined 7373
  • 74. See Scenario reported as undefined 7474
  • 75. See Scenario reported as undefined 7575 src/test/java/hellocucumber/Stepdefs.java
  • 76. See scenario reported as pending 7676
  • 77. See scenario reported as failing 7777
  • 78. See scenario reported as failing 7878
  • 79. See scenario reported as passing 7979
  • 80. Dry Run 8080 dryRun 을 통해 Feature 실행없이 스텝 정의를 검증할 수 있다.
  • 81. Test Automation Is Software Development 8181  Scenario 를 통해 System Under Test 를 보았다.  테스트와 소프트웨어 설계는 상호 보완적인 기술이며, 강한 팀은 두 전문성을 모두 갖추고 협력해야 한다.
  • 82. 6. Spring with Cucumber The Cucumber for Java 82
  • 84. Maven dependency 8484 Java8 lambda 연동 JUnit 연동 Spring 연동 2018.7월 기준 Java 8 까지만 대응 중. cucumber.version 은 2.4.0 권장. (3 버전 연동 오류 있음) IntelliJ 2018 권장. (plugin 이슈 있음) JUnit 은 4.11 이상 권장. (이하 버전 연동 오류 있음)
  • 87. 87
  • 88. 88
  • 89. Run with Cucumber-spring 8989 전체 Cucumber Feature 를 실행하기 위한 클래스. Cucumber Repor 를 만드는데 사용하기 위함.
  • 90. 7. Continuous Build The Cucumber for Java 90
  • 91. Publish pretty cucumber reports on Jenkins 9191  Get Jenkins  Install the Cucumber Reports plugin  Restart Jenkins
  • 92. Publish pretty cucumber reports on Jenkins 9292  Job Configuration  Post-build Actions 를 통해 Cucumber reports 플로그인 추가
  • 93. 93
  • 94. 94
  • 95. 95
  • 96. 96
  • 97. 97
  • 99. Top 5 Cucumber Best Practices 9999 https://blog.codeship.com/cucumber-best-practices/ 1. 선언적 Feature 를 작성하라. scenario 는 사용자 관점에서 설명 될 수 있도록 작성한다. 링크를 클릭하고 양식 필드를 채우거나 코드 또는 CSS 선택 등이 포함된 실행 또는 내부 처리 관점의 설명이 아니다. 도메인 관점의 간결 명료한 선언적 feature 를 만들어야 한다.
  • 100. Top 5 Cucumber Best Practices 100100 2. 내레이션으로 기술하라. 내레이션은 한 문장에서 기능이 무엇인지 설명한다. 이는 사용자 관점에서 도메인 이해 및 기능 자체가 필요한 역할을 설명하는 데 이점이 있다. 즉, 왜 처음에 이 기능을 구현 하는지를 이해 하는 데 중요 도움을 준다. 또한 기능에 대한 간략한 개요를 제공하므로 시나리오를 읽지 않고 다른 사람들이 대략적인 내용을 이해할 수 있다.
  • 101. Top 5 Cucumber Best Practices 101101 3. 결합된 동작의 단일 Step 을 피하라. 결합 된 두 가지 동작이 포함 된 단일 단계가 발생하면 “And” 를 사용하여 두 단계로 나줘야 한다. 이는 한 단계 당 하나의 작업을 수행하는 것이 명확한 이해와 함께 단계 구현을 모듈화 하여 재사용 가능성이 높아진다.
  • 102. Top 5 Cucumber Best Practices 102102 4. Step 정의를 재사용 하라. Cucumber 에서는 Step 을 재사용 할 수 있다. 이는 다른 Step 의 동작을 확장하거나 여러 단계로 구성된 우수한 동작을 정의 할 때 편리하다. 이렇게 하면 유지 보수성이 향상되어 특정 동작을 변경해야하는 경우 단일 Step 정의만 변경하면 된다.
  • 103. Top 5 Cucumber Best Practices 103103 5. Background 사용을 현명하게 사용하라. 모든 Scenario 를 시작할 때 동일한 Step 과정을 사용하는 경우 Background 를 배치하라. 단, 너무 길면 Scenario 가독성에 저해가 될 수 있으므로 너무 많은 Step 을 거치지 않도록 조심한다.
  • 104. Write Great Cucumber Tests 104104 https://saucelabs.com/blog/write-great-cucumber-tests
  • 105. Scenario and Step Definition Best Practices - Cucumber 105105 https://www.linkedin.com/pulse/scenario-step-definition-best-practices- cucumber-dilshan-fernando
  • 106. 15 EXPERT TIPS FOR USING CUCUMBER 106106 https://www.engineyard.com/blog/15-expert-tips-for-using-cucumber
  • 107. 9 tips for improving Cucumber test readability 107107 https://www.foreach.be/blog/9-tips-improving-cucumber-test-readability
  • 108. References 108108  https://cucumber.io/  The Cucumber for Java Book  BDD IN ACTION  ATDD BY EXAMPLE  Specification By Example  https://www.slideshare.net/oddpoet/cucumber- jvm