실제 값이 기대한 값과 같은지 확인하는 메서드.
expected에 기대하는 값을 넣고, actual에 실제 값을 넣는다.
(순서는 상관없지만 API의 정의는 정해져있다.)
모든 Assertion 메서드에는 마지막 줄에 message를 남길 수 있다.
1) assertEquals(StudyStatus.DRAFT , study.getStatus(), "String으로 메시지를 넣을 수 있음");
2) assertEquals(StudyStatus.DRAFT , study.getStatus(), () -> "람다식으로 메시지를 넣을 수 있음");
3) assertEquals(StudyStatus.DRAFT , study.getStatus(), new Supplier<String>() {
@Override
public String get() {
return "대충 만들 수 있는데, 서플라이어를 넣는다.";
}
});
위 코드에서 message를 작성하는 가장 기본이 되는 코드는 3번이다.
그러나 코드의 간결성과 생산성을 위해 1번 혹은 2번을 사용할 수 있다.
2번 람다식으로 메시지를 남기면 최대한 필요한 시점에 코드를 실행시켜 성능저하를 방지한다.
람다식이 아닌 방식으로 메시지를 작성하면 테스트를 성공하든 안하든 실행시킨다.
값이 Null인지 아닌지 확인하는 메서드.
다음 조건이 참(true)인지 확인하는 메서드.
assertTrue(study.getLimit() > 0, "스터디 참가인원은 0보다 커야 한다.");
불러온 값을 숫자 등과 비교하여 true, false 여부를 확인 할 수 있다.
assertAll 안에 있는 모든 Assertion을 확인하는 메서드.
assertAll(
()-> assertNotNull(study), //객체가 Null인지 아닌지 확인
()-> assertEquals(StudyStatus.DRAFT , study.getStatus(),
() -> "대충 메시지를 넣을 수 있다는 내용"),
()-> assertTrue(study.getLimit() > 0, "스터디 참가인원은 0보다 커야 한다.")
);
모든 assert의 실패 결과를 확인 할 수 있다.
Executable은 @FunctionalInterface로 메소드를 단 1개만 갖기 때문에 람다식을 사용해야 한다.
참고자료
예외 발생을 확인하는 메서드.
특정 예외를 캐치하여 구문을 테스트 할 수 있다.
assertThrows(IllegalArgumentException.class, ()-> new Study(-10));
특정 시간 안에 실행이 완료되는지 확인하는 메서드.
assertTimeout(Duration.ofMillis(300), () -> { //300밀리초를 설정하여 테스트를 진행
new Study(10); //구문중 실행이 300밀리초 내에 끝나야 함
Thread.sleep(300); //쓰레드에 300밀리초의 딜레이를 줌으로써 예외를 발생시켜본다.
});
본 글는 백기선님의 더 자바, 애플리케이션을 테스트하는 다양한 방법을 수강하며 학습한 내용입니다.