드디어 테스트를 배우기로 결정했다!
스프링 이니셜라이저로 생성한 경우 거의 따로 설정 필요X
클래스 선언부에 커서 > 마우스 우클릭 > Go To > Test > Create Test
@WebMvcTest | @SpringBootTest |
---|---|
Controller(API) 레이어만을 테스트하기에 적합 | 실제 어플리케이션을 로컬 위에 올리고, 포트와 DB 커넥션이 붙은 상태에서 진행하는 테스트 |
어노테이션 | 내용 |
---|---|
@Test | 테스트 메소드임을 선언 |
@ParameterizedTest | 매개변수를 받는 테스트 |
@RepeatedTest | 반복되는 테스트 |
@TestFactory | 동적 테스트 (cf. @Test: 정적 테스트) |
@TestMethodOrder | 테스트 메소드 실행 순서 |
@DisplayName | 테스트 클래스/메소드의 사용자 정의 이름 |
@BeforeEach | 모든 테스트 실행 전에 실행할 테스트 |
@AfterEach | - |
@BeforeAll | 현재 클래스 실행 전 제일 먼저 실행할 테스트(static) |
@AfterAll | 현재 클래스 종료 후 실행할 테스트 |
@Disabled | - |
테스트용 EntityManager
실제 데이터베이스로 테스트
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
class MyRepositoryTests {
// ...
}
org.junit.jupiter.api.Assertions
클래스는 값 검증을 위한 assert로 시작하는 static 메소드 제공
특정 조건이 충족되는 경우에만 테스트
public class AssumptionTest {
@Test
@DisplayName("window에서 테스트 실행")
void runTest_IfWindonw() {
assumeTrue(System.getProperty("os.name").startsWith("Windows"));
assertEquals(2, 2);
}
@Test
@DisplayName("linux에서 테스트 실행")
void runTest_IfLinux() {
assumeTrue(() -> System.getProperty("os.name").startsWith("Linux"));
assertEquals(2, 2);
}
@Test
@DisplayName("지정한 가정을 충족한 경우 지정한 검증을 수행")
void runTest() {
String osName = System.getProperty("os.name");
assumingThat(
osName.startsWith("Linux"), // (1) 가정 boolean 또는 BooleanSupplier
() -> assertEquals(1, 2) // (2) 가정을 충족할 때 실행할 코드(Executable 타입)
);
assertEquals(1, 1); // (3)
}
}
https://spring.io/guides/gs/testing-web/