관리 메뉴

기록하는 공간

assertThatThrownBy와 assertThatCode는 무엇인가 본문

자바

assertThatThrownBy와 assertThatCode는 무엇인가

giwoong01 2023. 10. 31. 21:25

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