-
Assertion백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법 2020. 5. 18. 00:08반응형
Assertion 종류
assertEqulas(expected, actual) 실제 값이 기대한 값과 같은지 확인 assertNotNull(actual) 값이 null이 아닌지 확인 assertTrue(boolean) 다음 조건이 참(true)인지 확인 assertAll(executables...) 모든 확인 구문 확인 assertThrows(expectedType, executable) 예외 발생 확인 assertTimeout(duration, executable) 특정 시간 안에 실행이 완료되는지 확인
duration - 몇초만에 끝내야하는지마지막 매개변수로 Supplier<String> 타입의 인스턴스를 람다 형태로 제공할 수 있다.
- 복잡한 메시지 생성해야 하는 경우 사용하면 실패한 경우에만 해당 메시지를 만들게 할 수 있다.
예시 1
마지막 매개변수 String의 매개변수 사용시
public class Study { private StudyStatus status; public StudyStatus getStatus() { return this.status; } }
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class StudyTest { @Test @DisplayName("스터디 만들기 \uD83D\uDE31") void create_new_syudy() { Study study = new Study(); assertNotNull(study); assertEquals(StudyStatus.DRAFT, study.getStatus(), "스터디를 처음 만들면 상태값이 DRAFT여야 한다."); } }
Supplier<String> 사용 및 람다 사용시
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class StudyTest { @Test @DisplayName("스터디 만들기 \uD83D\uDE31") void create_new_syudy() { Study study = new Study(); assertNotNull(study); /* assertEquals(StudyStatus.DRAFT, study.getStatus(), new Supplier<String>() { @Override public String get() { return "스터디를 처음 만들면 상태값이 DRAFT여야 한다."; } }); */ assertEquals(StudyStatus.DRAFT, study.getStatus(), () -> "스터디를 처음 만들면 상태값이 DRAFT여야 한다."); } }
마지막 매개변수로 String과 Supplier<String>(() -> "메세지")의 차이
마지막에 String 변수가 들어가면 성공하든 실패하든 문자열 연산을 사용하여 표출을 하지만
람다 표현식을 사용을 하면 문자열 연산을 실패했을 때만 사용한다.
즉, 람다표현식을 사용하면 유리하다.
예시2
assertAll, assertNotNull, assertEquals assertTrue 사용
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class StudyTest { @Test @DisplayName("스터디 만들기 \uD83D\uDE31") void create_new_syudy() { Study study = new Study(-30); assertAll(() -> assertNotNull(study), () -> assertEquals(StudyStatus.DRAFT, study.getStatus(), () -> "스터디를 처음 만들면 상태값이 DRAFT여야 한다."), () -> assertTrue(study.getLimit() > 0, () -> "스터디를 최대 참석 가능인원은 0보다 커야 한다.")); } }
public class Study { private StudyStatus status = StudyStatus.DRAFT; private int limit; public Study(int limit) { this.limit = limit; } public StudyStatus getStatus() { return this.status; } public int getLimit() { return limit; } }
public enum StudyStatus { DRAFT, STARTED, ENDED }
예시3
assertThrows, assertEquals 사용
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class StudyTest { @Test @DisplayName("스터디 만들기 \uD83D\uDE31") void create_new_syudy() { IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> new Study(-10)); String message = exception.getMessage(); assertEquals("limit는 0보다 커야 한다.", message); } }
public class Study { private StudyStatus status = StudyStatus.DRAFT; private int limit; public Study(int limit) { if(limit < 0) { throw new IllegalArgumentException("limit는 0보다 커야 한다."); } this.limit = limit; } public StudyStatus getStatus() { return this.status; } public int getLimit() { return limit; } }
예시 4
assertTimeout
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class StudyTest { @Test @DisplayName("스터디 만들기 \uD83D\uDE31") void create_new_syudy() { //성공 예시 //assertTimeout(Duration.ofSeconds(10), () -> new Study(10)); //실패 예시 assertTimeout(Duration.ofMillis(100), () -> { new Study(10); Thread.sleep(300); }); } }
반응형'백기선(인프런 강의) > 더 자바, 애플리케이션을 테스트하는 다양한 방법' 카테고리의 다른 글
Mockito (0) 2020.05.24 Junit5 조건에 따라 테스트 실행하기 (0) 2020.05.19 테스트 이름 표시하기 (0) 2020.05.17 JUnit 5 시작하기 (0) 2020.05.17 Junit5 소개 (0) 2020.05.15