Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring
- Postman
- MySQL시작하기
- SpringBoot
- MYSQL에러
- MySQL
- SQL
- appleM1
- Java
- intellij
- VUE
- wappalyzer
- K8S
- Seek_Keyset
- frontend
- 스프링에러
- gradle
- DB생성
- Lombok
- 이클립스
- springMVC
- 우분투에war배포
- offset
- NullPointerException
- String
- restful api
- CloutNative
- pagination
- minikube
- windows10
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @JsonTest 본문
Spring & Spring Boot/Spring Boot
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @JsonTest
Serina_Heo 2022. 9. 27. 11:06스프링부트는 애플리케이션 테스트 슬라이스를 위한 여러가지 애노테이션을 제공한다.
@JsonTest
JSON 직렬화/역직렬화 테스트를 위한 설정만을 활성화할 수 있다.
package demo.user;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.JsonTest;
import org.springframework.boot.test.json.JacksonTester;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.asserThat;
@RunWith(SpringRunner.class)
@JsonTest
public class UserTests {
private User user;
// Jackson 에서 제공하는 AssertJ 기반의 JSON 테스터를 주입받는다.
@Autowired
private JaksonTester<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 deserializeJson() throws Exception {
String content = "{\"username\": \"user\", \"fristName\": \"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");
}
@Test
public void serializeJson() throws Exception {
// User 객체를 JSON 으로 반환하고 user.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");
}
private void assertJsonPropertyEquals(String key, String value) throws java.io.IOException {
assertThat(this.json.write(user)).extractJsonPathsStringValue(key).isEqualTo(value);
}
}
실제 JSON 직렬화 결과가 테스트 메소드에 의해 실행되는 예상 결과와 일치하는지 판정할 수 있는 방법은 여러가지가 있다.
classpath에 있는 JSON 파일을 테스트 자원으로 매핑해서 테스트 메소드가 종료되고 정리될 때까지 사용할 수 있는데, 속성값이 아주 많을 때는 특히 유용하다. 그렇지 않으면 deserializeJson() 메소드에 작성된 것처럼 너저분하게 JSON 문자열을 하드코딩해서 비교하고 판정할 수도 있다.
src/test/resource 아래에 user.json 파일은 아래와 같다.
{
"username": "user",
"firstName": "Jack",
"lastName": "Frost",
"email": "jfrost@example.com",
"createdAt": 12345,
"lastModified": 12346,
"id": 0
}
[Reference] Cloud Native Java - Josh Long, Kenny Bastani, 책만
'Spring & Spring Boot > Spring Boot' 카테고리의 다른 글
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @DataJpaTest (0) | 2022.09.28 |
---|---|
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @WebMvcTest (0) | 2022.09.27 |
[Spring Boot] Cloud Native Java - Test (1) 모의 기법 활용 (0) | 2022.09.27 |
[Spring Boot] 스프링부트 설정 정보 우선순위 (0) | 2022.09.26 |
[Spring Boot] Test code 작성 @Mock vs. @MockBean (0) | 2022.08.03 |