인프런의 "더 자바, 애플리케이션을 테스트하는 다양한 방법”을 보고 정리한 것임

1. Assertion

  • 값 검증을 위한 assert로 시작하는 static(정적) 메서드를 제공하고 있음
  • JUnit4로부터 온 assertion 메소드와 새롭게 자바 8 람다 표현식으로 추가된 메소드들이 있음
  • assertEqulas(expected, actual)
    • 실제 값이 기대한 값과 같은지 확인
  • assertNotNull(actual)
    • 값이 null이 아닌지 확인
  • assertTrue(boolean)
    • 다음 조건이 참(true)인지 확인
  • assertAll(executables...)
    • 모든 확인 구문 확인
    • 함수형인터페이스인 Executable 목록을 파라미터로 갖음
      • 람다식을 사용해서 여러개의 검증을 목록으로 전달 할 수 있음
  • assertThrows(expectedType, executable)
    • 예외 발생 확인
  • assertTimeout(duration, executable)
    • 특정 시간 안에 실행이 완료되는지 확인
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class StudyTest {

    @DisplayName("스터디 만들기")
    @Test
    void assertAllTest() {
        Study study = new Study(-1);

        assertAll(
                () -> assertNotNull(study),
                () -> assertEquals(StudyStatus.DRAFT, study.getStatus(),
                        () -> "스터디를 처음 만들면 상태값이 " + StudyStatus.DRAFT + "이어야 한다."),
                () -> assertTrue(study.getLimit() > 0, "스터디 최대 참석 가능 인원은 0보다 커야한다.")
        );
    }

    @Test
    void assertThrowsTest() {
        IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> new Study(-10));
        String message = exception.getMessage();
        assertEquals("limit은 0보다 커야 한다.", message);
    }

    @Test
    void assertTimeoutTest() {
//        assertTimeout(Duration.ofMillis(10), () -> new Study(-10));
        assertTimeout(Duration.ofMillis(10), () -> {
            new Study(10);
            Thread.sleep(100);
        });

//        정해진 시간이 됬을 때 바로 끝남
//        Thead관련 문제가 발생 할 수 있으므로 사용에 주의의
//       assertTimeoutPreemptively(Duration.ofMillis(100), () -> {
//            new Study(10);
//            Thread.sleep(200);
//        });
    }

    @BeforeAll
    static void beforeAll() {
        System.out.println("BeforeAll!");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("AfterAll!");
    }

    @BeforeEach
    void setUp() {
        System.out.println("BeforeEach!");
    }

    @AfterEach
    void tearDown() {
        System.out.println("AfterEach!");
    }
}
profile
고우고우~

0개의 댓글