프레임워크/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

https://velog.io/@eden6187/JUnit5%EC%99%80-JUnit4%EB%A5%BC-%EA%B0%99%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%A0-%EB%95%8C-%EC%9C%A0%EC%9D%98%ED%95%B4%EC%95%BC%ED%95%A0-%EC%A0%90

 

JUnit5와 JUnit4를 같이 사용할 때 유의해야할 점

JUnit5와 JUnit4를 같이 사용할 때 유의해야할 점 배경 지식 - JUnit4 vs JUnit5 마르코 멘토님 정리글 kakao if JUnit4 vs JUnit5 위의 2가지 글과 영상을 보시고, 최소한 "vintage-engine"이 무엇인지는 이해하고 이

velog.io