Given-When-Then
@Test
@DisplayName("")
void () throws Exception {
//given
//when
//then
}
Plain Text
복사
•
테스트코드 작성 시 활용하는 패턴 준비 - 실행 - 검증 패턴으로 설계한다
Given
•
테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분
•
테스트를 위해 준비하는 과정
When
•
구체화하고자 하는 그 행동
•
실제로 액션
Then
•
어떤 특정한 행동 때문에 발생할거라고 예상되는 변화에 대한 설명
•
테스트를 검증
사용 예시
@Test
@DisplayName("id조회")
void findOne() throws Exception {
//given
Long id = 5l;
given(articleService.getArticleById(id))
.willReturn(new ArticleDto(5l, "test1116", "content1116"));
//when
mockMvc.perform(get("/api/v1/articles/5"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").exists())
.andExpect(jsonPath("$.title").exists())
.andExpect(jsonPath("$.content").exists())
.andDo(print());
//then
verify(articleService).getArticleById(id);
}
Java
복사
@Test
@DisplayName("13 - 영업중")
void status() {
//given
Hospital hosptal1 = Hospital.builder()
.id(4)
.businessStatusCode(13)
.build();
Mockito.when(hospitalRepository.findById(any()))
.thenReturn(Optional.of(hosptal1));
//when
HospitalResponse hospital = hospitalService.getHospital(4);
//then
assertEquals("영업중",hospital.getBusinessStatusName());
}
Java
복사
given?
//given
given(articleService.getArticleById(id))
.willReturn(new ArticleDto(5l, "test1116", "content1116")
//given?
Mockito.when(hospitalRepository.findById(any()))
.thenReturn(Optional.of(hosptal1));
Java
복사
Mockito.when 메서드 또한 테스트 준비를 위한 것이기 때문에 given에 포함된다.
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.when;
Java
복사
윗 줄의 given은 코드 가독성을 올리기 위해서 BDDMockito 사용했다.
BDDMockito
•
Behavior-Driven Development의 약자로 행위 주도 개발을 말한다.
•
BDDMockito의 코드를 살펴보면 Mockito을 상속한 클래스임을 알 수 있다.
•
그리고 동작이나 사용하는 방법 또한 Mockito와 거의 차이가 없다.
기존의 일반적인 테스트에서 BDD를 도입하려고 한다면
BDDMockito를 사용하여 테스트의 전반적인 가독성을 높일 수 있을 것이다
tdd 매크로 등록
인텔리제이 live templates 기능을 활용한다
Define 부분을 java로 해준다