📌 테스트 코드 가독성 높이기 - BDD 적용
💡 BDD
Behavior-Driven Development(행위 주도 개발) 의 약자
이를 테스트에 적용시키면,
테스트 대상의 상태의 변화를 시나리오(given-when-then)을 기반으로 테스트하는 방법
💡 BDDMockito
테스트 코드가 시나리오(given-when-then)에 맞게 읽히도록 개선된 Mockito Framwork
Mockito를 상속하며, 기능도 동일하지만
BDD 구조로 쉽게 읽힐 수 있도록 도와주는 것
💡 Mockito -> BDDMockito
① when을 given으로
Mockito 코드에서는 메서드와 그 행동을 설정할 때 when을 이용함
하지만 이 부분은 시나리오 상 given에 해당하므로
BDDMockito에서는 네이밍을 given으로 변경
// Mockito
when(accountRepository.save(account)).thenReturn(returnsFirstArg());
// BDDMockito
given(accountRepository.save(account)).thenReturn(returnsFirstArg());
② verify를 then should로
Mockito 코드에서는 특정 함수가 실횅되었는지 테스트하기 위해 verify를 이용함
하지만 then에 해당함을 명시하며, 더 자연어처럼 읽히게 하기 위해
BDDMockito에서는 then should로 네이밍 변경
// Mockito
verify(accountRepository, times(1)).save(account);
// BDDMockito
then(accountRepository).should(times(1)).save(account);
📌 테스트 코드 가독성 높이기 - JUnit의 assertThat보다 assertj의 assertThat를 사용
💡 JUnit의 assertThat
JUnit의 assertThat은 두개의 인자가 필요함
1. 검증 대상(로직의 결과) 2. 비교 대상(matcher)
e.g assertThat(result, greaterThan(0));
=> 이는 가독성이 좋지 않음
또한, 두번째 인자인 matcher가 자동완성되지 않으므로 메소드를 외워둬야 함
💡 assertj의 assertThat
반면 assertj의 assertThat은 인자로 검증 대상만 넣어주면 됨
그리고 검증하기 위해서는 메소드 체이닝 패턴을 사용 => 자동완성 지원
// JUnit
assertEquals(12L, accountDto.getUserId());
// assertj
assertThat(accountDto.getUserId())
.isEqualsTo(12L);
참고 블로그 : https://jwkim96.tistory.com/168
'Spring Boot' 카테고리의 다른 글
[SpringBoot] 연관관계의 주인이 필요한 이유 (0) | 2023.10.01 |
---|---|
[SpringBoot] @Mock vs @MockBean (0) | 2023.09.29 |
스프링 시큐리티를 이용한 로그인 (0) | 2023.09.03 |
스프링 시큐리티를 이용한 회원가입 (0) | 2023.09.02 |
트랜잭션의 개념과 @Transacional 어노테이션 (0) | 2023.08.11 |