개인 메모용 게시글 입니다
테스트 하는 메소드의 대한 테스트를 모아놓은 @Nested
클래스 만들고 그 클래스 안에 여러가지의 테스트 메소드 작성
ex) getPlaylists()
메소드에 대한 테스트
@Nested
class GetPlaylistsTests {
@Test
void 플레이리스트_목록_가져오기_성공() {
// given
// when
// then
}
@Test
void 플레이리스트_목록_가져오기_페이지네이션() {
// given
// when
// then
}
@Test
void 탈퇴한_멤버의_트랙이_포함된_플레이리스트_조회() {
// given
// when
// then
}
}
통합 테스트와 로직 테스트는 분리해야한다. 분리하지 않을 경우 앱이 커지면 테스트코드 유지보수가 불가능해지고 어디서 오류가 발생한지 몰라 테스트 실패가 떠도 수정이 번거로워진다.
어떤 상황에서도 통과하도록 테스트 작성
ex) 통합 테스트시 DB에 데이터가 이미 있든 없든 통과하도록
사용되는 범위에만 변수 선언
한 테스트 메소드에서는 한가지 개념만 테스트하고, 이름 또는 DisplayName은 명령문으로 정의
ex)
1. 플레이리스트_목록을_가져온다
2. 빈_플레이리스트_목록을_가져온다
3. 플레이리스트_목록을_가져올때_페이지네이션을_적용한다
4. 탈퇴한_멤버의_트랙이_포함된_플레이리스트를_조회할_경우_탈퇴한_멤버의_개인정보는_숨겨진다
5. 삭제한_트랙이_포함된_플레이리스트를_조회할_경우_트랙을_올린 회원의_정보를_볼수없다
@BeforeEach
는 가독성에 좋지 않다. 저 아래에 있는 테스트 코드를 이해하기 위해서 맨 위에 있는 @BeforeEach
를 찾아서 읽어야한다. 최대한 지양하기.
DB 연동된 통합 테스트 시, 영속성 컨텍스트에 관해 잘 생각해야 한다.
결국 핵심은 나중에 보고 수정하거나 뭘 추가하기 쉽게 하기 위함이다.