기록하는 공간
assertThatThrownBy와 assertThatCode는 무엇인가 본문
assertThatThrownBy와 assertThatCode는 무엇인가.
assertThatThrownBy(() -> ~~ )
assertThatThrownBy()는 예외가 던져지면 테스트가 성공한다.
예외가 던져지지 않으면 오류가 발생한다.
assertThatCode(() -> ~~)
assertThatCode()는 예외가 던져지지 않으면 실패하지 않는다.
어떠한 예외도 던지지 않을 경우 assertThatCode(() -> ~~).doesNotThrowAnyException()를 사용하면 된다.
아래의 예시를 보면 이해가 더 쉬울 것이다.
예시
예를 들어 Car라는 클래스가 있다.
public class Car {
private final String name;
private int position;
public Car(String name) {
validationNameLength(name);
this.name = name;
}
public void validationNameLength(String name) {
if (name.length() > 5 || name.isEmpty()) {
throw new IllegalArgumentException();
}
}
public void move(int power) {
if (power >= 4) {
position++;
}
}
}
assertThatCode()를 사용한 예제
public class CarTest {
@DisplayName("자동차에게 이름을 부여한다.")
@Test
void 자동차_이름_부여() {
assertThatCode(() -> new Car("자동차1"))
.doesNotThrowAnyException();
}
}
위와 같이 사용할 경우 에러가 발생하지 않으니 이 테스트케이스는 성공한다.
assertThatThrownBy()를 사용한 예제
public class CarTest {
@DisplayName("이름 길이 실패")
@ParameterizedTest
@ValueSource(strings = {"", "여섯글자이름"})
void 자동차이름_길이_실패(String value) {
assertThatThrownBy(() -> new Car(value))
.isInstanceOf(IllegalArgumentException.class);
}
}
위와 같이 사용할 경우 자동차의 이름 길이가 조건을 만족하지 못하기 때문에 IllegalArgumentException에러가 발생한다.
결국 에러가 발생했기 때문에 테스트케이스는 성공한다.
정리
assertThatThrownBy → 무조건 에러가 발생해야 한다. 에러가 발생하지 않으면 실패
assertThatCode → 에러가 발생하면 안 된다. 에러가 발생하면 실패.
'자바' 카테고리의 다른 글
오버로딩과 오버라이딩 (1) | 2023.07.05 |
---|