테스트 클래스 만들기
command + shift + T
특정 테스트 메서드 실행
해당하는 메서드 위치에 커서를 두고
ctrl + shift + R
class StudyTest {
@Test
void create(){
Study study = new Study();
assertNotNull(study);
}
}
JUnit5 부터는 클래스나 테스트 메서드가 public일 필요가 없다.
자바에서 Reflection을 사용하면 이렇게 private하거나 default한 메서드에서 접근하고 실행이 가능해서 굳이 public일 필요가 없다.
해당 테스트 클래스 안에 있는 여러 테스트가 모두 실행이 될때
이 모든 테스트를 실행하기 전에 반드시 딱 한번 호출된다.
static voidmethod로 구현
@BeforeAll
static void beforeAll(){
System.out.println("before all");
}
모든 테스트가 실행된 이후에 딱 한번만 호출된다.
static voidmethod로 구현
@AfterAll
static void afterAll(){
System.out.println("after all");
}
모든 테스트를 실행할 때 각각의 테스트를 실행하기 이전과 이후에 한번씩 호출된다.
@BeforeEach
void beforeEach(){
System.out.println("before each");
}
@AfterEach
void afterEach(){
System.out.println("after each");
}

1. 모든 테스트를 실행하기 전에 @BeforeAll 한번 호출
2. @BeforeEach → test method → @AfterEach
3. @BeforeEach → 다른 test method → @AfterEach
4. 모든 테스트가 다 실행된 후 @AfterAll 한번 호출
실행하고 싶지 않은 테스트가 있는 경우 사용
@Test
@Disabled
void create1(){
System.out.println("create1");
}

Method와 Class 레퍼런스를 사용해서 테스트 이름을 표기하는 방법 설정.
기본 구현체로 ReplaceUnderscores 제공
언더바를 빈 공백 문자로 치환
@DisplayNameGeneration(ReplaceUnderscores.class)
![]() | ![]() |
|---|
@DisplayNameGeneration 보다 우선 순위가 높다.이 방법을 더 권장한다.
우리가 실제 테스트에서 검증하고자 하는 내용을 확인하는 기능
| 메서드 | 설명 |
|---|---|
assertEquals(expected, actual) | 실제 값이 기대한 값과 같은지 확인 |
assertNotNull(actual) | 값이 null이 아닌지 확인 |
assertTrue(boolean) | 다음 조건이 참(true)인지 확인 |
assertAll(executables...) | 모든 확인 구문 확인 |
assertThrows(expectedType, executable) | 예외 발생 확인 |
assertTimeout(duration, executable) | 특정 시간 안에 실행이 완료되는지 확인 |
마지막 매개변수로 Supplier<String> 타입의 인스턴스를 lamda 형태로 제공 가능
복잡한 메시지를 생성해야 하는 경우 사용하면 실패한 경우에만 해당 메시지를 만들게 할 수 있다.
@Test
void create_new_study(){
Study study = new Study();
assertNotNull(study);
assertEquals(StudyStatus.DRAFT, study.getStatus(), () -> "스터디를 처음 만들면 DRAFT 상태어야 한다.");
System.out.println("create");
}
매번 Assertion의 메서드가 실행될때마다 테스트의 성공, 실패 여부 상관없이
메시지를 만들기 위한 문자열 연산이 실행된다.
즉, 문자열 연산의 비용이 걱정되는 메시지인 경우 람다 표현식으로 사용하는 것이 낫다.
성능을 신경쓰는 입장에서 조금 더 유리할 수 있다.
테스트가 실패하는 부분을 모두 확인할 수 있다.
사용하지 않는 경우
assertEquals의 실패로 다음 테스트인 assertTrue의 성공 여부는 알 수 없다.
@Test
void create_new_study(){
Study study = new Study(-10);
assertAll(
() -> assertNotNull(study),
() -> assertEquals(StudyStatus.DRAFT, study.getStatus(), () -> "스터디를 처음 만들면 DRAFT 상태어야 한다."),
() -> assertTrue(study.getLimit() > 0, "스터디 최대 참석 가능 인원은 0보다 커야한다.")
);
}

Assertion 말고
AssertJ, Hemcrest, Truth 등의 라이브러리를 사용할 수도 있다.
이건 취향 차이일듯
@EnabledOnOs({OS.MAC, OS.LINUX})
운영체제가 MAC, LINUX인 경우에만 실행하겠다.
@DisabledOnOs(OS.MAC)
운영체제가 MAC인 경우 실행하지 않겠다
@EnabledOnJre({JRE.JAVA_8, JRE.JAVA_9, JRE.JAVA_10})
java version이 8, 9, 10인 경우에만 실행하겠다.
IfSystemProperty, IfEnvironmentVariable, if
이 외에도 이런 것들을 사용해서
테스트를 좀 더 다양한 환경에서 선택적으로 실행할 수 있다.