Behavior Driven Development(BDD)
BDD는 테스트(test), 문서(documentation), 예시(example)를 한데 모아놓은 개념
describe("pow", function() {
it("주어진 숫자의 n 제곱", function() {
assert.equal(pow(2, 3), 8);
});
});
스펙은 세 가지 주요 구성 요소로 이루어진다.
describe("title", function() { ... })
구현하고자 하는 기능에 대한 설명이 들어간다.
예시에선 함수 pow가 어떤 동작을 하는지에 대한 설명이 들어감. it 블록을 한데 모아주는 역할도 함
it("유스 케이스 설명", function() { ... })
it의 첫 번째 인수엔 특정 유스 케이스에 대한 설명이 들어간다.
이 설명은 누구나 읽을 수 있고 이해할 수 있는 자연어로 적어준다. 두 번째 인수엔 유스 케이스 테스트 함수가 들어감
assert.equal(value1, value2)
기능을 제대로 구현했다면 it 블록 내의 코드 assert.equal(value1, value2)이 에러 없이 실행된다.
함수 assert.*는 pow가 예상한 대로 동작하는지 확인해준다. 위 예시에선 assert.equal이 사용되었는데, 이 함수는 인수끼리 동등 비교했을 때 다르다고 판단되면 에러를 반환한다. 예시에선 pow(2, 3)의 결괏값과 8을 비교
BDD에선 스펙을 먼저 작성하고 난 후에 구현을 시작한다. 구현이 종료된 시점에는 스펙과 코드 둘 다를 확보할 수 있다.
스펙의 용도는 세 가지이다.
- 테스트 – 함수가 의도하는 동작을 제대로 수행하고 있는지 보장함
- 문서 – 함수가 어떤 동작을 수행하고 있는지 설명해줌. describe와 it에 설명이 들어감
- 예시 – 실제 동작하는 예시를 이용해 함수를 어떻게 사용할 수 있는지 알려줌
Describe - Context - It 패턴
Describe, Context, It 세 단어가 핵심 키워드.
키워드설명
Describe | 설명할 테스트 대상을 명시한다. |
Context | 테스트 대상이 놓인 상황을 설명한다. |
It | 테스트 대상의 행동을 설명한다. |
- 영어로 Context문을 작성할 때에는 반드시 with 또는 when으로 시작하도록 한다.
- It 구문은 It returns true, It responses 404와 같이 심플하게 설명할수록 좋다.
키워드설명
Describe | 테스트 대상이 되는 클래스, 메소드 이름을 명시한다. |
Context | 테스트할 메소드에 입력할 파라미터를 설명한다. |
It | 테스트 대상 메소드가 무엇을 리턴하는지 설명한다. |
보통 다른 언어의 D-C-I 패턴을 지원하는 BDD 테스트 프레임워크에서는 다음과 같은 형태의 테스트 코드를 작성하게 된다.
Describe("Sum", func() {
Context("With 300 and 200", func() {
It("returns 500", func() {
Expect(Sum(300, 200)).To(Equal(500))
})
})
Context("With -300 and 200", func() {
It("returns -100", func() {
Expect(Sum(-300, 200)).To(Equal(-100))
})
})
})
한국어로 테스트 설명을 작성하기
한국어로 작성한다면 다음과 같은 간단한 기준을 따르면 될 것 같다.
- Describe는 테스트 대상을 명사로 작성한다.
- Context는 ~인 경우, ~할 때, 만약 ~ 하다면 과 같이 상황 또는 조건을 기술한다.(주어진 상황이 달라질 때를 명시할 때)
- 보통 context는 1) 할일이 없다면, 2)할일이 있다면, 이런식으로 주어진 상황이 달라질 때 사용
- It은 위에서 명사로 작성한 테스트 대상의 행동을 작성한다.(그래서 어떤 결과가 나오는지를 명시)
- 테스트 대상의 행동은 ~이다, ~한다, ~를 갖는다가 적절한다.
- ~된다 같은 수동형 표현은 좋지 않다.
즉, BDD가 테스트 대상의 행동을 묘사하는 방식이라는 것을 염두에 두고 작성하면 된다.
참고 사이트
추천해주신 테스트 리뷰 링크
https://github.com/CodeSoom/react-week3-assignment-1/pull/134
https://github.com/CodeSoom/react-week3-assignment-1/pull/138#pullrequestreview-1015192093
추천해주신 관련 링크
https://johngrib.github.io/wiki/junit5-nested/#describe---context---it-%ED%8C%A8%ED%84%B4
https://marocchino.net/2016/12/04/about-rspec/
https://ko.javascript.info/testing-mocha#ref-888
https://github.com/ahastudio/til/blob/main/ruby/20161206-rspec-let.md
https://www.youtube.com/watch?v=gfTsSBRvdqI
+ 관련 사이트
https://www.youtube.com/watch?v=L1dtkLeIz-M
https://learn-react-test.vlpt.us/#/06-rtl-tdd
'CodeSoom- React 13기' 카테고리의 다른 글
[코드숨] 리액트 13기 -3강/React-Testing(과제 1: To-do 테스트 작성하기)-review 반영 (0) | 2022.10.30 |
---|---|
[코드숨] 리액트 13기 -3강/React-Testing(과제 1: To-do 테스트 작성하기)아샬 강의 (0) | 2022.10.29 |
[코드숨] 리액트 13기 -3강/React-Testing(Jest,React testing library,TDD) (0) | 2022.10.27 |
[코드숨] 리액트 13기 -2강/ 과제2 - 간단한 Todo App 만들기(과제풀이) (0) | 2022.10.22 |
[코드숨] 리액트 13기 -2강/ 과제1-Counter 앱 만들고 파일 분리하기(과제풀이) (0) | 2022.10.22 |