Loading...
Spring Framework Reference Documentation 7.0.2의 Defining Expectations의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Assertions는 AssertJ assertions와 동일한 방식으로 동작합니다. 이 support는 다음 예제에
나와 있는 것처럼 MvcTestResult의 다양한 부분에 대해 전용 assert 객체를 제공합니다:
1assertThat(mockMvc.get().uri("/hotels/{id}", 42)) 2 .hasStatusOk() 3 .hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON) 4 .bodyJson().isLenientlyEqualTo("sample/hotel-42.json");
1assertThat(mockMvc.get().uri("/hotels/{id}", 42)) 2 .hasStatusOk() 3 .hasContentTypeCompatibleWith(MediaType.APPLICATION_JSON) 4 .bodyJson().isLenientlyEqualTo("sample/hotel-42.json")
요청이 실패하는 경우, exchange는 예외를 던지지 않습니다. 대신 exchange의 결과가 실패했는지 assert할 수 있습니다:
1assertThat(mockMvc.get().uri("/hotels/{id}", -1)) 2 .hasFailed() 3 .hasStatus(HttpStatus.BAD_REQUEST) 4 .failure().hasMessageContaining("Identifier should be positive");
1assertThat(mockMvc.get().uri("/hotels/{id}", -1)) 2 .hasFailed() 3 .hasStatus(HttpStatus.BAD_REQUEST) 4 .failure().hasMessageContaining("Identifier should be positive")
요청이 예기치 않게 실패할 수도 있는데, 이는 handler가 던진 예외가 처리되지 않고
그대로 던져지는 경우를 의미합니다. 여전히 .hasFailed()와 .failure()를 사용할 수
있지만, 결과의 일부에 접근하려는 모든 시도는 exchange가 완료되지 않았기 때문에
예외를 던지게 됩니다.
MvcTestResult에 대한 AssertJ support는 bodyJson()을 통해 JSON support를 제공합니다.
JSONPath가 사용 가능하다면, JSON 문서에 expression을 적용할 수 있습니다. 반환된 값은 지원되는 다양한 JSON 데이터 타입에 대해 전용 assert 객체를 반환하는 편리한 메서드를 제공합니다:
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .extractingPath("$.members[0]") 3 .asMap() 4 .contains(entry("name", "Homer"));
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .extractingPath("$.members[0]") 3 .asMap() 4 .contains(entry("name", "Homer"))
message converter가 올바르게 구성되어 있는 한, raw content를 여러분의 데이터 타입 중 어떤 것으로든 변환할 수도 있습니다:
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .extractingPath("$.members[0]") 3 .convertTo(Member.class) 4 .satisfies(member -> assertThat(member.name).isEqualTo("Homer"));
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .extractingPath("$.members[0]") 3 .convertTo(Member::class.java) 4 .satisfies(ThrowingConsumer { member: Member -> 5 assertThat(member.name).isEqualTo("Homer") 6 })
target Class로 변환하면 generic assert 객체를 제공합니다. 더 복잡한 타입의 경우,
가능하다면 전용 assert 타입을 반환하는 AssertFactory를 대신 사용하고자 할 수 있습니다:
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .extractingPath("$.members") 3 .convertTo(InstanceOfAssertFactories.list(Member.class)) 4 .hasSize(5) 5 .element(0).satisfies(member -> assertThat(member.name).isEqualTo("Homer"));
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .extractingPath("$.members") 3 .convertTo(InstanceOfAssertFactories.list(Member::class.java)) 4 .hasSize(5) 5 .element(0).satisfies(ThrowingConsumer { member: Member -> 6 assertThat(member.name).isEqualTo("Homer") 7 })
JSONAssert도 지원됩니다. response의 body는
Resource 또는 content와 매칭될 수 있습니다. content가 .json으로 끝나는 경우,
classpath에서 해당 이름과 일치하는 파일을 찾습니다:
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .isStrictlyEqualTo("sample/simpsons.json");
1assertThat(mockMvc.get().uri("/family")).bodyJson() 2 .isStrictlyEqualTo("sample/simpsons.json")
다른 라이브러리를 사용하고 싶다면,
JsonComparator의 구현을 제공할 수 있습니다.
Performing Requests
MockMvc integration