BDD
2020. 4. 2. 15:30ㆍ코드 품질 관리
728x90
1. BDD란
BDD(Behavior Driven Development)로 TDD를 근간으로 파생된 개발 방법입니다. TDD에서 한 발 더 나아가 테스트 케이스 자체가 요구 사항이 되도록 하는 개발 방법입니다. BDD를 통해 개발을 하게 된다면 테스트 메소드의 이름을 “이 클래스가 어떤 행위를 해야한다.”라는 식의 문장으로 작성하여 행위에 대한 테스트에 집중할 수 있습니다.
2. BDD의 기본 패턴
BDD는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않습니다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장합니다. 하나의 시나리오는 Given, When, Then 구조를 가지는 것으로 기본 패턴을 권장합니다.
- Feature: 테스트에 대상의 기능 / 책임을 명시합니다.
- Scenario: 테스트 목적에 대한 상황을 설명합니다
- Given: 시나리오 진행에 필요한 값을 설정합니다.
- When: 시나리오를 진행하는데 필요한 조건을 명시합니다.
- Then: 시나리오를 완료했을 때 보장해야 하는 결과를 명시합니다.
위의 내용을 개발 측면에서 더 간략하게 정리하면 테스트 대상의 상태 변화를 테스트하는 것입니다.
작성 예시
@Test
fun `aliases for behavior driven development`() {
//given
given(calculatorService.add(20.0, 10.0)).willReturn(30.0)
//when
val result = calculatorService.add(20.0, 10.0)
//then
Assert.assertThat(30.0, CoreMatchers.`is`(result))
}
3. TDD와 BDD의 차이
TDD
- 코드에 집중된 테스트 코드를 작성
- 비즈니스 요구 사항에 따른 로직을 파악하기 힘듬
- 추후 코드를 수정할 때, BDD보다 코스트가 클 수가 있음
BDD
- 시나리오(비즈니스 요구 사항)에 집중된 테스트 코드를 작성
- 일반적인 TDD에 비해 의도와 목적을 구체적으로 작성하기 때문에 요구 사항을 파악하기 쉬움
728x90
'코드 품질 관리' 카테고리의 다른 글
Given-When-Then 패턴 (0) | 2020.04.01 |
---|---|
TDD (0) | 2020.04.01 |
System Test (0) | 2020.03.29 |
Integration Test (0) | 2020.03.29 |
Code Coverage (0) | 2020.03.28 |