일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- sort
- 탐욕법
- ELB
- Spring Boot
- mysql
- 백준알고리즘
- react
- 자료구조
- EC2
- java
- AWS
- 백준
- EventListener
- Algorithm
- 브루트포스
- 라우터
- 스터디
- 토이프로젝트
- nodejs
- 알고리즘
- 리액트
- 서버구축
- Router
- 정렬
- url parsing
- BFS
- 다익스트라 알고리즘
- 완전탐색
- spring
- 동적프로그래밍
- Today
- Total
공부하는 블로그
Spring | BDD - Given / When / Then 본문
BDD?
Behavior Driven Development. 행위 주도 개발의 줄임말로, 사용자의 행위에 중심을 두고 짜여진 시나리오를 기반으로 테스트 코드를 작성한다. 즉, 주어진 환경에서 유저의 행위에 대한 결과 검증을 진행한다.
Given, When, Then
BDD의 정형화된 테스트 형식이다.
- Given : 시나리오에서 유저에게 주어진 환경
- When : 유저의 행위
- Then : 행위의 예상되는 결과
예를 들어, 나는 빵집 리뷰 플랫폼을 만드는 개발자인데 "서울지역 이외의 빵집을 사용자가 리뷰로 등록할 때, 리뷰 등록이 불가능하다." 라는 유저 시나리오가 있다고 가정하면,
- Given : 서울 이외의 지역 입력
- When : 사용자가 리뷰 등록
- Then : 예외 발생
로 나누어 테스트 코드를 작성할 수 있다.
Java Code Example
BDDMockito를 이용하여 given, when, then 형식의 단위 테스트를 작성해보도록 하자.
Mockito vs BDDMockito?
기존에 사용되던 Mockito의 mocking 코드를 BDD 형식으로 바꾼 것이 BDDMockito 이다.
// Mockito
when(userService.findById(any())).thenReturn(user)
// BDDMockito
given(userService.findById(any())).willReturn(user)
- when().thenRerturn() 을 BDD 형식에 맞게 given().willReturn()으로 변경
위의 예시 시나리오 "서울지역 이외의 빵집을 사용자가 리뷰로 등록할 때, 리뷰 등록이 불가능하다." 를 테스트코드로 작성해보자.
@Test
@DisplayName("서울 지역 이외의 빵집은 리뷰 등록이 불가능하다.")
void givenNotSeoulWhenSaveBakeryThenThrowException() {
// given
BakerySaveRequestDto request = mock(BakerySaveRequestDto.class);
given(request.getCity()).willReturn("경기");
// then
assertThrows(IllegalCityException.class, () -> {
// when
bakeryService.save(request);
});
}
@Test
@DisplayName("서울 지역 빵집은 리뷰 등록이 가능하다.")
void givenSeoulWhenSaveBakeryThenSuccess() {
// given
BakerySaveRequestDto request = mock(BakerySaveRequestDto.class);
given(request.getCity()).willReturn("서울");
// when
bakeryService.save(request);
// then
then(bakeryRepository)
.should()
.save(any());
}
- given절에서는 given() 을 이용하여 Mock 객체의 리턴 값을 지정한다. (시나리오 환경 세팅)
- when절에서는 테스트할 행위 메서드를 수행한다.
- then절에서는 예상 결과를 검증한다.
Reference
'Spring' 카테고리의 다른 글
Spring | MockServer (0) | 2023.09.24 |
---|---|
Spring | @TransactionalEventListener (0) | 2023.09.17 |
Spring | Application Event (0) | 2023.09.10 |
Spring | Mockito Unit Test (0) | 2023.08.27 |
Spring | Annotations (0) | 2020.09.29 |