본 글은 우아한 테크코스 프리코스 2주차 미션 중 공부한 내용을 기록한 것이다.
-> 우아한 테크코스 프리코스 2주차 미션 java-baseball
-> 필자가 제출한 코드
-> 2주차 미션 회고
Assertion을 제공하는 자바 라이브러리.
에러 메세지와 테스트 코드의 가독성을 높일 수 있다.
주로 다음과 같이 assertThat()과 isEqualTo() 메소드를 활용해 테스트를 수행한다.
assertThat(actual).isEqualTo(expected);
assertThat() 메소드는 다양한 체이닝 메소드 형태로 구현될 수 있으며, 이는 가독성을 매우 높여줄 수 있다.
assertThat(actual).isEqualTo(expected);
assertThat("Woowa Tech Course")
.isNotNull()
.startsWith("Woowa")
.contains("Tech")
.endsWith("Course");
동일성 비교가 아닌, 동등성 비교를 하고 싶은 경우 활용한다.
ExampleClass ec1 = new ExampleClass("ex");
ExampleClass ec2 = new ExampleClass("ex");
assertThat(ec1).isEqualTo(ec2); // fail. 동일성을 비교하므로.
assertThat(ec1).usingRecursiveComparison().isEqualTo(ec2); // success. 동등성을 비교하므로.
assertThatThrownBy()
assertThatThrownBy(() -> {
예외처리포함메소드;
}).isInstanceOf(예외클래스)
.hasMessage(예외메세지)
// ======
assertThatThrownBy(() -> {
List<String> list = Arrays.asList("String one", "String two");
list.get(2); // 인덱스 범위 초과 예외 발생
}).isInstanceOf(IndexOutOfBoundsException.class) // 인덱스 범위 초과 예외 Exception의 클래스 정보
.hasMessage("Index: 2, Size: 2"); // 예외 메세지 정보
assertThatExceptionOfType()
assertThatExceptionOfType(예외클래스)
.isThrownBy(() -> {
예외처리포함메소드;
}).hasMessage(예외메세지);
// ======
assertThatExceptionOfType(IndexOutOfBoundsException.class)
.isThrownBy(() -> {
List<String> list = Arrays.asList("String one", "String two");
list.get(2);
}).hasMessage("Index: 2, Size: 2");
Throwable + assertThat()
Throwable thrown = catchThrowalbe(() -> {
예외처리포함메소드;
});
assertThat(thrown)
.isInstanceOf(예외클래스)
.hasMessageContaining(예외메세지)
// ======
Throwable thrown = catchThrowable(() -> {
ExampleClass.exampleMethod();
});
assertThat(thrown)
.isInstanceOf(ArithmeticException.class)
.hasMessageContaining("/ by zero");
예외처리 관련 체이닝 메소드
hasMessage("예외메세지") : 파라미터로 전달된 예외메세지가 actual로 인해 던져진 예외메세지와 동일한지 확인한다.
hasMessageStartingWith("??") : actual 예외메세지가 특정 문자열로 시작하는지 확인한다.
hasMessageEndingWith("??") : actual 예외메세지가 특정 문자열로 끝나는지 확인한다.
hasMessageContaining("??") : actual 예외메세지에 특정 문자열이 포함되는지 확인한다.
hasMessageMatching("정규표현식") : actual 예외메세지가 파라미터로 전달된 정규표현식에 부합하는지 확인한다.
assertThat(thrown).isInstanceOf(IOException.class).hasMessageMatching("Index: \\d+, Size: \\d+")
hasCauseInstanceOf(예외클래스) : actual 예외 인스턴스가 파라미터로 전달된 예외 클래스의 인스턴스인지 확인한다.
hasStackTraceContaining("stack trace 내용") : actual 예외의 stack trace 내용에 파라미터로 전달된 문자열이 포함되는지 확인한다.
assertThatIOException().isThrownBy(() -> {
예외처리포함메소드;
});