-
간단한 프로젝트에서 테스트 도중 발생한 일이다.
아래 코드에서 보이는 것처럼 @BeforeEach를 이용하여 member와 post 생성을 해주었는데도 불구하고 NullPointExeption이 발생했다. @BeforeEach가 실행되지 않은 것이다.
@BeforeEach void setMemberAndPost(){ member = memberService.signUp(createMember("userId","nickName","password")); post = postService.create(createPost("comment","Title"),member.getId()); } @DisplayName("commentId로 comment 하나만 불러온다.") @Test public void findOneTest1(){ //given CommentSaveDto commentSaveDto = CommentSaveDto.builder() .memberId(member.getId()) .postId(post.getId()) .content("CommentSaveTest") .build(); Comment comment = commentService.save(commentSaveDto); //then Comment findOne = commentService.findOne(comment.getId()); //when assertThat(findOne.getId()).isEqualTo(comment.getId()); }
해결은 간단하게 할 수 있었다.
위는 JUnit 4 아래는 JUnit 5 의 Test를 import하는 코드이다.
JUnit 5의 vintage-engine가 JUnit 4 를 실행 가능하게 하지만 두 엔진은 서로 분리되어 실행이된다.
그래서 JUnit 5의 @BeforeEach가 먼저 실행되고 JUnit 4의 Test가 실행되기 때문에 @BeforeEach가 정상적인 기능을 할 수 없게 된다. 아래의 참고 자료를 보면 반대에서도 동일하게 적용된다는 것을 알 수 있다.
결론 : JUnit 4와 JUnit 5 는 혼용하지 말자
ref
'프레임워크 > Spring' 카테고리의 다른 글
@Valid를 이용해 타임리프에서 유효성 검증하기 (1) 2022.08.19 SpringSecurity2 - Authentication Architecture (0) 2022.07.13 SpringSecurity1 - Spring Security Filter가 실행 되는 방법(feat. DelegatingFilterProxy) (0) 2022.07.04 HttpSession은 어떻게 만들어지고 어떻게 유지될까(feat. 코드를 통해 확인하는 JSESSION의 생성 방법과 기존 세션 확인 방법) (2) 2022.06.11 Exception (feat. @ControllerAdvice를 이용한 Exception 전역화) (0) 2022.06.06 댓글