/////
Search

221118

작성자
조예지
최민준
날짜
2022/11/18
학습 내용
given,when,then
텍스트

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로 해준다