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(); // 어떠한 예외도 발생하지 않을 것이다.
}
위의 코드와 같이 예외가 발생하지 않는(정상적인) 경우를 테스트 하는 경우가 있다.
로직 상 문제가 없음에도 해당 테스트 코드는 실패한다.
이는 예외가 반드시 발생해야하는데, 발생하지 않아서 테스트가 실패하게 된다.
하지만, assertThatCode
로 변경한 후에는 정상적으로 테스트는 성공한다.
@ParameterizedTest
@ValueSource(strings = {"가", "구본식의 봉사기관", "unicef", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"})
@DisplayName("기관이름은 1~50자까지만 가능하다.")
void checkOrganizationNameSizeWhenCreate(String organizationName) {
assertThatCode(() -> Schedule.builder()
...
.doesNotThrowAnyException(); // 어떠한 예외도 발생하지 않을 것이다.
}
그럼 *assertThatCode()*
, *assertThatThrownBy()*
는 어떤 차이가 있는 걸까?
아래는 assertThatThrownBy()
대한 설명이다.
예외가 발생하지 않는다면, 즉시 error가 발생한다.
이 경우 as()와 함께 제공된 테스트 설명이 적용되지 않는다.
즉, *assertThatThrownBy()
사용한* 테스트 코드에서는 반드시 예외가 발생해야한다.