프레임워크/Spring
@BeforeEach 또는 @Before 가 왜 실행 안되지? (feat. JUnit 4와 JUnit 5를 함께 쓸때 주의할 점)
내이름은 킹햄찌
2022. 9. 16. 00:43
간단한 프로젝트에서 테스트 도중 발생한 일이다.
아래 코드에서 보이는 것처럼 @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
JUnit5와 JUnit4를 같이 사용할 때 유의해야할 점
JUnit5와 JUnit4를 같이 사용할 때 유의해야할 점 배경 지식 - JUnit4 vs JUnit5 마르코 멘토님 정리글 kakao if JUnit4 vs JUnit5 위의 2가지 글과 영상을 보시고, 최소한 "vintage-engine"이 무엇인지는 이해하고 이
velog.io