ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Multiple Assertions
    ☕️ java 2023. 10. 29. 12:47

    우테코 프리코스 - 자동차 경주 게임 미션을 진행하면서 하나의 테스트 함수에서 기능에 대해 여러 결과를 검증하기 위해서 assertThat() 을 여러 번 이용해 검증을 했다.

    하지만, 이 방법을 사용하다 보니 각 검증 코드가 실패한다면 다음 검증을 수행하지 않고 테스트 함수가 바로 중단되었다.

     

    🆚 assertThat 과 assertAll

    assertThat을 여러개 사용해서 여러 결과를 검증하는 방법을 사용했을 때는 하나의 검증 코드가 실패하면 그 다음 검증들은 수행되지 않았기에 여러 검증 코드들을 assertAll 으로 grouping 하여 모든 검증을 수행하고 나온 결과를 한번에 볼 수 있도록 했다.

     

    assertThat을 이용한 테스트 코드

    @Test
    void assertThatTest() {
        // given
        // when
        // then
        assertThat(1).isEqualTo(1);
        assertThat(2).isEqualTo(2);
        assertThat(1).isEqualTo(2);
        assertThat(1).isEqualTo(3);
    }

     

    결과

    • assertThat(1).isEqualTo(2) 이 부분에 대한 결과만 출력되고 그 이후의 검증에 대한 결과는 출력되지 않았다.

     

     

    assertAll을 이용한 테스트

    @Test
    void assertAllTest() {
        // given
        // when
        // then
        assertAll(
                () ->  assertThat(1).isEqualTo(1),
                () ->  assertThat(2).isEqualTo(2),
                () ->  assertThat(1).isEqualTo(2),
                () ->  assertThat(1).isEqualTo(3)
        );
    }

     

    결과

    • 검증문의 실행 결과를 모두 출력했다.

     

    ☀️ assertSoftly

    assertSoftly는 assertAll 과 마찬가지로 모든 검증을 수행한 후 그에 대한 모든 결과를 출력한다.

    assertAll 과는 달리 실패한 코드의 라인 위치를 알려주어 실패한 검증에 대해 빠르게 찾을 수 있다.

    @Test
    void assertSoftlyTest() {
        SoftAssertions.assertSoftly((softAssertions) -> {
            softAssertions.assertThat(1).isEqualTo(2);
            softAssertions.assertThat(1).isEqualTo(3);
        });
    }

     

    결과

    💡 결론

    한 번에 여러 검증을 해야하는 경우 assertAll을 사용해 실패된 검증문의 결과를 한 번에 파악하여 이를 빠르게 수정할 수 있었습니다.

    많은 검증 코드가 있을 경우에 assertAll을 사용했을 때는 에러가 발생한 부분을 찾는데 오래 걸릴 수 있지만 assertSoftly를 통해 바로 문제가 발생한 코드에 접근하는데 매우 유용할 것이라고 생각해 한번에 많은 검증이 필요한 경우 assertSoftly를 사용할 것 같다.

     

    📖 참고자료

    assertAll() vs Multiple Assertions in JUnit5 | Baeldung

    assertAll in JUnit 5

    SoftAssertions (AssertJ fluent assertions 3.12.0 API)

     

    '☕️ java' 카테고리의 다른 글

    👻 Mockito  (0) 2023.10.31
    🔗 Java 문자열와 구분자  (1) 2023.10.30
    ☕️ Java 17  (1) 2023.10.25
    🆚 AssertJ과 JUnit 의 Assertions 비교  (1) 2023.10.25
    @ParameterizedTest  (0) 2023.10.25

    댓글

Designed by Tistory.