AssertJ.SoftAssertions와 assertSoftly

Outbox

개념

assertSoftly는 여러 개의 검증(assert)을 한 번에 모아서 수행하고, 실패한 검증들을 마지막에 한꺼번에 보여주는 AssertJ 기능.

일반 assert의 문제

@Test
void test() {
   assertThat(user.getName()).isEqualTo("charles");
   assertThat(user.getAge()).isEqualTo(20);
   assertThat(user.getEmail()).contains("@");
}

위의 예시 코드에서 첫번째 assertThat이 실패하는 경우 아래 두줄의 코드는 실행되지 않고, 테스트가 종료된다.

assertSoftly로 해결

이때 assertSoftly를 사용하면, 여러개의 검증을 한 번에 모아서 실행한뒤 실패한 검증 결과를 한번에 제공한다.

assertSoftly(softly -> {
    softly.assertThat(response.name()).isEqualTo("charles");
    softly.assertThat(response.age()).isEqualTo(20);
    softly.assertThat(response.email()).contains("@");
    softly.assertThat(response.role()).isEqualTo("ADMIN");
});

테스트 결과

Multiple Failures (2 failures)

1) name assertion failed
2) age assertion failed

사용 케이스

@Test  
@DisplayName("정상 정보로 Reservation을 생성한다")  
void create() {  
    final Reservation r = new Reservation(RESERVER, DATE, TIME, THEME);  
  
    assertSoftly(softly -> {  
        softly.assertThat(r.reserver()).isEqualTo(RESERVER);  
        softly.assertThat(r.date()).isEqualTo(DATE);  
        softly.assertThat(r.time()).isEqualTo(TIME);  
        softly.assertThat(r.theme()).isEqualTo(THEME);  
    });}