SpringBootTest로 서블릿 컨테이너 설정
- 스프링 부트는 자동 설정의 일부만을 테스트 슬라이스로 가져와서 테스트에 활용할 수 있도록 다양한 테스트 어노테이션을 제공한다.
- 대부분 health check를 확인 할수 있는 HTTP 종단점을 사용하기 위해서는 서블릿 컨테이너를 필요로 한다.
- @SpringBootTest 어노테이션은 어플리케이션 컨텍스트를 전체를 사용하도록 설정된 통합 테스트를 할때 사용되어야한다.
- @SpringBootTest로 테스트 컨텍스트에 맞는 서블릿 환경을 설정 할수 있다.(webEnvironment 속성을 통해 어플리케이션 임베디드 서블릿 컨테이너를 설정 할수 있다.)
@SpringBootTest의 webEnvironment 속성
- MOCK - WebApplicationContext를 로딩 하고 모의 서블릿 환경을 제공
- DEFINED_PORT - EmbeddedWebApplicationContext를 로딩, 지정된 포트 번호를 통해 실제 서브릿 환경 제공
- RANDOM_PORT - EmbeddedWebApplicationContext를 로딩, random 포트 번호를 통해 실제 서브릿 환경 제공
- NONE - 어플리케이션 컨텍스트를 로딩하지만 서블릿 환경을 제공하지 않는다,
슬라이스
스프링 부트는 어플리케이션 테스트 슬라이스를 위한 여러 가지 어노테이션을 제공한다.
@JsonTest
JsonTest를 사용하면 Json직렬/역질렬화 테스트가 가능하다.
user.json
1
2
3
4
5
6
7
8
9 {
"username": "user",
"firstName": "Jack",
"lastName": "Frost",
"email": "jfrost@example.com",
"createdAt": 12345,
"lastModified": 12346,
"id": 0
}
UserTests
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@RunWith(SpringRunner.class)
@JsonTest
public class UserTests {
private User user;
//JackSon 에서 제공하는 AssetJ 기반의 Json테스터를 주입
@Autowired
private JacksonTester<User> json;
@Before
public void setUp() throws Exception {
User user = new User("user", "Jack", "Frost", "jfrost@example.com");
user.setId(0L);
user.setCreatedAt(12345L);
user.setLastModified(12346L);
this.user = user;
}
@Test
public void serializeJson() throws Exception {
//유저를 Json으로 변화하고 비교
assertThat(this.json.write(user)).isEqualTo("user.json");
assertThat(this.json.write(user)).isEqualToJson("user.json");
assertThat(this.json.write(user)).hasJsonPathStringValue("@.username");
//실제 Json결과가 예상한 속성값과 일치하는지 판정
assertJsonPropertyEquals("@.username", "user");
assertJsonPropertyEquals("@.firstName", "Jack");
assertJsonPropertyEquals("@.lastName", "Frost");
assertJsonPropertyEquals("@.email", "jfrost@example.com");
}
@Test
public void deserializeJson() throws Exception {
String content = "{\"username\": \"user\", \"firstName\": \"Jack\", "
+ "\"lastName\": \"Frost\", \"email\": \"jfrost@example.com\"}";
assertThat(this.json.parse(content)).isEqualTo(
new User("user", "Jack", "Frost", "jfrost@example.com"));
assertThat(this.json.parseObject(content).getUsername()).isEqualTo("user");
}
private void assertJsonPropertyEquals(String key, String value)
throws java.io.IOException {
assertThat(this.json.write(user)).extractingJsonPathStringValue(key)
.isEqualTo(value);
}
}
isEqualTo에 user.json의 파일 참조를 통한 테스트
WebMvcTest
스프링 MVC 컨트롤러의 테스트 지원한다
1 |
|
MockMvc는 스프링 MVC 테스트 프레임워크에서 제공되는 클래스이다. 클라이언트의 요청은 테스트 대상 컨트롤러로 전달되는 역할을 한다.
DataJpaTest
- JPA테스트 지원 및 내장 인매모리 데이터베이스도 제공
- TestEntityManager는 JPA엔티티 테스트에서 자주 사용되는 구문과 유틸성 메소드를 추가하여 만들어졌다.
<네이티브 클라우드 자바 4장 테스트 참고>