2020. 12. 23. 01:46ㆍSpring/Spring Boot
※ 공식 레퍼런스 문서(docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing)에도 자세히 기술되어 있다.
1. 테스트 어노테이션
어노테이션 | 설명 | Bean |
@SpringBootTest | 통합 테스트, 전체 | Bean 전체 |
@WebMvcTest | 단위 테스트, MVC 테스트 | MVC 관련된 Bean |
@DataJpaTest | 단위 테스트, JPA 테스트 | JPA 관련 Bean |
@RestClientTest | 단위 테스트, Rest API 테스트 | 일부 Bean |
@JsonTest | 단위 테스트, Json 테스트 | 일부 Bean |
2. @SpringBootTest
이 어노테이션은 통합 테스트를 제공하는 기본적인 어노테이션이다. 애플리케이션이 실행 될 때의 설정을 임의로 변경하여 테스트를 진행할 수 있으며, 여러 단위 테스트를 하나의 통합된 테스트로 수행할 때 적합하다. 쉽게 말해 모든 테스트를 수행할 수 있는 어노테이션이라고 생각하면 쉽다. 단, 애플리케이션의 설정을 모두 로드하는 만큼 규모가 커질 수 록 느려진다.
3. @WebMvcTest
이 어노테이션은 MVC를 위한 테스트로 웹에서 테스트하기 힘든 컨트롤러를 테스트하는데 적합하다. 웹상에서 요청과 응답에 대한 테스트를 진행하며 시큐리티 혹은 필터까지 자동으로 테스트하여 수동으로 추가하거나 삭제가 가능하다. 또한 MVC 관련 설정만 로드되기에 @SpringBootTest 어노테이션에 비해 가볍다.
4. @DataJpaTest
이 어노테이션은 JPA와 관련된 설정만 로드한다. 데이터 소스의 설정이나 JPA를 사용하여 CRUD가 정상적으로 동작하는지 테스트할 수 있다. 기본적으로 인메모리 데이터베이스를 사용한다. @Entity 클래스를 스캔하여 스프링 데이터 JPA 저장소를 구성한다.
5. @RestClientTest
이 어노테이션은 Rest와 관견된 테스트를 도와준다. Rest 통신의 JSON 형식이 예상대로 응답을 반환하는지 테스트한다.
// test.json
{
"id": 1,
"title": "title",
"price": 1000
}
@RunWith(SpringRunner.class)
@RestClientTest(BookRestService.class)
public class BookRestServiceTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Autowired
private BookRestService bookRestService;
@Autowired
private MockRestServiceServer server;
@Test
public void rest_test() {
server.expect(requestTo("/rest/test"))
.andRespond(
withSuccess(new ClassPathResource("/test.json", getClass()), MediaType.APPLICATION_JSON));
Book book = bookRestService.getRestBook();
assertThat(book.getId(), is(notNullValue()));
assertThat(book.getTitle(), is("title"));
assertThat(book.getPrice(), is(1000D));
}
}
6. @JsonTest
이 어노테이션은 JSON의 직렬화, 역직렬화를 수행하는 라이브러리은 Gson과 Jackson의 테스트를 제공한다.
@RunWith(SpringRunner.class)
@JsonTest
public class BookJsonTest {
@Autowired
private JacksonTester<Book> json;
@Test
public void json_test() throws IOException {
final Book book = new Book("title", 1000D);
String content= "{\n" +
" \"id\": 0,\n" +
" \"title\": \"title\",\n" +
" \"price\": 1000\n" +
"}";
assertThat(json.parseObject(content).getTitle()).isEqualTo(book.getTitle());
assertThat(json.write(book)).isEqualToJson("/test.json");
}
}
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Boot, JWT, OAuth2 (2) (1) | 2021.03.06 |
---|---|
[Spring Boot] Spring Boot, JWT, OAuth2 (1) (0) | 2021.03.04 |
[Spring Boot] Redis Cache, MySQL 이용한 간단한 API 제작 (1) | 2020.12.22 |
[Spring Boot] MySQL를 이용한 간단한 API 제작 (0) | 2020.12.22 |