개요
- JUnit5 에서 제공하는
org.junit.jupiter.api.Assertions 라이브러리를 사용해보자.
Assertion
class StudyTest {
@Test
@DisplayName("스터디 만들기 첫 번째")
void create() throws Exception {
Study study = new Study(10);
assertAll(
() -> assertNotNull(study),
() -> assertEquals(StudyStatus.DRAFT, study.getStatus(),
() -> "스터디를 처음 만들면 상태 값이 " + StudyStatus.DRAFT + " 상태다."),
() -> assertTrue(study.getLimit() > 0,
"스터디 최대 참석 가능 인원은 0보다 커야 한다.")
);
}
@Test
@DisplayName("스터디 만들기 두 번째")
void createTwo() throws Exception {
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
() -> new Study(-10));
String message = ex.getMessage();
assertEquals("limit 은 0 보다 커야 한다.", message);
}
@Test
@DisplayName("스터디 만들기 세 번째")
void createThree() throws Exception {
assertTimeoutPreemptively(Duration.ofMillis(100), () -> {
new Study(10);
Thread.sleep(300);
});
// assertTimeoutPreemptively 는 Thread 를 사용한다.
// Thread 공유가 안되는 ThreadLocal 를 사용하는 코드는 에러가 발생한다.
// ThreadLocal 를 사용하는 코드는 assertTimeout 사용
}
}
- assertNotNull(actual)
- assertEqulas(expected, actual)
- 실제 값이 기대한 값과 같은지 확인
- 기대하는 값, 실제 값, 에러 메시지 작성
- 에러 메시지를 람다식으로 작성함으로써 문자열 연산을 필요한 시점에만 한다. (테스트 실패 시에만 메시지 출력을 위해 연산)
- assertTrue(boolean)
- assertAll(executables...)
- 모든 확인 구문 확인
- 하나의 테스트 메서드에 여러 테스트 구문이 있을 경우 첫 구문에서 에러가 발생하면 다음 구문들은 테스트 결과를 확인할 수 없다.
- assertAll 안에서 람다식 작성을 통해서 모든 구문의 결과를 확인할 수 있다.
- assertThrows(expectedType, executable)
- assertTimeout(duration, executable)
- 특정 시간 안에 실행이 완료되는지 확인
- 타임 아웃이 끝나도 구문 안에서 걸리는 시간을 모두 기다려야 한다.
- assertTimeoutPreemptively(duration, executable)
- 특정 시간 안에 실행이 완료되는지 확인
- 지정한 timeout 도달하면 종료한다.
- thread 를 사용하기 때문에 ThreadLocal 를 사용하는 코드는 에러가 발생한다.
- ThreadLocal 를 사용하는 코드라면 assertTimeout 사용하자.
요약
| 실제 값이 기대한 값과 같은지 확인 |
assertEqulas(expected, actual) |
| 값이 null이 아닌지 확인 |
assertNotNull(actual) |
| 다음 조건이 참(true)인지 확인 |
assertTrue(boolean) |
| 모든 확인 구문 확인 |
assertAll(executables...) |
| 예외 발생 확인 |
assertThrows(expectedType, executable) |
| 특정 시간 안에 실행이 완료되는지 확인 |
assertTimeout(duration, executable) |
| 특정 시간 안에 실행이 완료되는지 확인 |
|
| (지정한 timeout 도달하면 종료) |
assertTimeoutPreemptively(duration, executable) |