부끄럽지만, 오늘 테스트 코드를 작성하며 겪었던 황당한 실수들을 정리해보고자 한다.
1. Repository 불러올 때 @Autowired 빼먹기
@Autowired
private PostCommentApiRepository postCommentApiRepository;
....
2. 연관관계에 있는 Repository 초기화 깜빡하기...
@OneToMany 등의 연관관계가 명시되어 있는 Repo들은, 반드시 초기화 해줘야 한다.
추가로, A는 B와, B는 C와 연관관계가 있고, C에 대한 Repo 테스트코드를 작성하고자 한다면?
마찬가지로, A, B, C 모두 불러와야 한다.
반대로, 의존관계를 따로 설정해주지 않았을 경우 다른 레포를 초기화 해줄 필요는 없다.
3. @BeforeEach, @BeforeAll 헷갈려서 사용하기.
@BeforeAll은 static method만 실행할 수 있다. 그리고, 코드 실행 전에 한번 초기화 된다.
@BeforeEach는, 테스트 코드 실행 전후로 실행되고, Static 아니어도 실행 가능하다.
사실 깊은 이해가 부족하다. 굉장히 부끄러웠던 부분인데, 반드시 복습하고 넘어가야 한다.
공룡책, JVM 등 학습하라는 이야기 들음...
4. 단위 테스트인데 다른 레이어 기웃거리기.
지금은 Repository 생성자 함수를 위주로 테스트 하고 있는데, 아까 맞이한 에러의 경우 뭐가 잘못되었나 싶어서 다른 레이어도 구경을 다닐 뻔 했다.
다행히도 그새 정신을 차리고 해당하는 레이어를 잘 살펴보았다.
5. 생성자 인자로 같은 값 전달해주기.
@Test
void of(){
// GIVEN -> 여기 같은 인자를 전달해주는...
PostComment willBeSaved = PostComment.of(1L, 2L, null, "test");
System.out.println(willBeSaved);
// WHEN
PostComment saved = postCommentApiRepository.save(willBeSaved);
// THEN
assertEquals(saved.getUserId(), willBeSaved.getUserId());
assertEquals(saved.getPostId(), willBeSaved.getPostId());
assertEquals(saved.getParentCommentId(), willBeSaved.getParentCommentId());
assertEquals(saved.getContent(), willBeSaved.getContent());
}
1L, 2L로 빠르게 고쳤지만, 처음에는 1L, 1L로 작성했었다..
이렇게 될 경우, 같은 값이어서 테스트가 통과되는 경우가 발생해서,
가급적 다른 값을 넣어주는게 좋겠다.
유용한 플러그인 소개
IntelliJ 플러그인 중, grepconsole(https://plugins.jetbrains.com/plugin/7125-grep-console)라는 플러그인을 발견했다.
콘솔창의 다양한 에러 메세지 중 중요한 부분을 하이라이팅 해주는 플러그인인데,
James님이 설치를 강제하셔서 바로 깔았다. 매우 편리하다.
'Software Development > Trial-and-error' 카테고리의 다른 글
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!