Schedule.builder() .timetable(timetable) .content("모집") .organizationName(organizationName) .address(address) .participationNum(10) .isDeleted(IsDeleted.N) .currentVolunteerNum(0) .build()) .doesNotThrowAnyException(); // 어떠한 예외도 발생하지 않을 것이다. }"> Schedule.builder() .timetable(timetable) .content("모집") .organizationName(organizationName) .address(address) .participationNum(10) .isDeleted(IsDeleted.N) .currentVolunteerNum(0) .build()) .doesNotThrowAnyException(); // 어떠한 예외도 발생하지 않을 것이다. }"> Schedule.builder() .timetable(timetable) .content("모집") .organizationName(organizationName) .address(address) .participationNum(10) .isDeleted(IsDeleted.N) .currentVolunteerNum(0) .build()) .doesNotThrowAnyException(); // 어떠한 예외도 발생하지 않을 것이다. }">
@ParameterizedTest
@ValueSource(strings = {"가", "구본식의 봉사기관", "unicef", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"})
@DisplayName("기관이름은 1~50자까지만 가능하다.")
void checkOrganizationNameSizeWhenCreate(String organizationName) {
	assertThatThrownBy(() -> Schedule.builder()
                .timetable(timetable)
                .content("모집")
                .organizationName(organizationName)
                .address(address)
                .participationNum(10)
                .isDeleted(IsDeleted.N)
                .currentVolunteerNum(0)
                .build())
                .doesNotThrowAnyException(); // 어떠한 예외도 발생하지 않을 것이다.
}

위의 코드와 같이 예외가 발생하지 않는(정상적인) 경우를 테스트 하는 경우가 있다.

Untitled

로직 상 문제가 없음에도 해당 테스트 코드는 실패한다.

이는 예외가 반드시 발생해야하는데, 발생하지 않아서 테스트가 실패하게 된다.

하지만, assertThatCode 로 변경한 후에는 정상적으로 테스트는 성공한다.

@ParameterizedTest
@ValueSource(strings = {"가", "구본식의 봉사기관", "unicef", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"})
@DisplayName("기관이름은 1~50자까지만 가능하다.")
void checkOrganizationNameSizeWhenCreate(String organizationName) {
	assertThatCode(() -> Schedule.builder()
               ...
                .doesNotThrowAnyException(); // 어떠한 예외도 발생하지 않을 것이다.
}

Untitled

그럼 *assertThatCode()*, *assertThatThrownBy()*는 어떤 차이가 있는 걸까?

1. assertThatThrowBy()

아래는 assertThatThrownBy() 대한 설명이다.

Untitled

예외가 발생하지 않는다면, 즉시 error가 발생한다.

이 경우 as()와 함께 제공된 테스트 설명이 적용되지 않는다.

즉, *assertThatThrownBy() 사용한* 테스트 코드에서는 반드시 예외가 발생해야한다.