Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[recap] Junit5 #13

Open
kgy1008 opened this issue Jul 31, 2024 · 0 comments
Open

[recap] Junit5 #13

kgy1008 opened this issue Jul 31, 2024 · 0 comments
Assignees
Labels
recap recap sec4 sec4

Comments

@kgy1008
Copy link
Contributor

kgy1008 commented Jul 31, 2024

무엇을 알게 되었나요?

강의에서는 테스트코드를 Junit4를 이용해서 아래와 같이 작성하고 있다.

@Test(expected = IllegalStateException.class)
public void 중복_회원_예외() throws Exception {
   // given
   Member member1 = new Member();
   member1.setName("kim");

   Member member2 = new Member();
   member2.setName("kim");

   // when
   memberService.join(member1);
   memberService.join(member2);
        
   // then
   fail("예외가 발생해야 한다!")
}

내가 사용하는 Junit 버전은 5였기 때문에 위의 코드를 따라치자 Cannot resolve method ‘expected’ 라는 오류가 발생했다. 찾아보니 Junit 5에서는 expected 속성을 지원하지 않아 발생되는 오류였으며 대신에 Junit5에서는 assertThrows 메서드를 사용하여 예외가 발생하는지 확인할 수 있다고 한다. (assertThrows 메서드는 특정 블록이 예외를 던지는지 확인하는 메서드라고 하네요.)

아래 코드는 강의에서의 코드를 assertThrows 메서드를 활용하여 재작성한 코드이다.

@Test
 public void 중복_회원_예외() throws Exception {
    // given
    Member member1 = new Member();
    member1.setName("kim");

    Member member2 = new Member();
    member2.setName("kim");

    // when & then
    assertThrows(IllegalStateException.class, () -> {
        memberService.join(member1);
        memberService.join(member2);
    });
}

참고로 처음에 테스트코드에 사용한 함수들에 대한 명확한 이해없이 assertThrows 함수 아래에 fail("예외가 발생해야 한다!") 을 작성하니 테스트가 실패하는 오류가 발생하였다. 즉 아래처럼 테스트 코드를 작성했다.

@Test
 public void 중복_회원_예외() throws Exception {
    // given
    Member member1 = new Member();
    member1.setName("kim");

    Member member2 = new Member();
    member2.setName("kim");

    // when & then
    assertThrows(IllegalStateException.class, () -> {
        memberService.join(member1);
        memberService.join(member2);
    });

    fail("예외가 발생해야 한다!")
}

Junit4를 사용한 강의 코드에서는 expected로 인해 IllegalStateException이 발생하면 해당 예외로 인해 테스트가 즉시 종료되어 fail함수가 실행되지 않아 테스트가 성공하게 된다.

하지만 Junit5에서는 IllegalStateException이 발생하면, 이 예외는 assertThrows에 의해 잡히게 되고 해당 함수를 성공적으로 통과하지만 테스트가 종료되지 않고 아래로 내려가 fail함수를 실행하여 테스트가 실패하게 되는 것이다. 즉, 해당 예외가 발생하면 assertThrows는 성공으로 수행된 후, 테스트를 종료하지 않고 테스트를 강제로 실패하게 하는 이후의 코드인 fail함수를 실행하여 테스트가 실패하게 되는 것이다.

어려운 내용이 있었다면 이를 어떻게 해결하였나요?

  • 인프런 Q&A 게시판 찾기
  • 구글링 & GPT

어떤 자료를 참고하였나요?

@kgy1008 kgy1008 added sec4 sec4 recap recap labels Jul 31, 2024
@kgy1008 kgy1008 self-assigned this Jul 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
recap recap sec4 sec4
Projects
None yet
Development

No branches or pull requests

1 participant