我刚刚更新了我的应用程序以使用spring-test 5.3.12和JUnit 5.7.2,但现在我的测试失败了。
对于以前的版本(5.2.X),响应类型始终为“application/json”,但现在我收到此错误:
java.lang.AssertionError: Content type expected:<application/json> but
was:<application/json;charset=UTF-8>
Expected :application/json
Actual :application/json;charset=UTF-8
我已经检查了响应上的内容Type实际上是带有Postman、Browser和Swagger的application/json
失败的测试示例
@Test
void whenGetReleaseNotesAppVersionWithNoExistingCodeThenNotFoundInJsonFormat() throws Exception {
this.mvc.perform(get(
NEWER_RELEASES_PATH_UPDATE_CONFIG + "/"
+ "6.0.0" + "/notes")
.header(AUTH_HEADER, AUTH_TOKEN_SRVCGERETDESAX)
.locale(Locale.ENGLISH)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath(
"$.code", is(ApiErrorCode.RELEASE_NOTES_NOT_FOUND.getCode())));
}
无法将 MediaType 更改为 APPLICATION_JSON_UTF8,因为现已弃用,所以我无法弄清楚如何解决这个问题。
MockMVC只是自动连线的,无需进一步配置
@Autowired
private MockMvc mvc;
课堂上的批注
@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = {
Application.class })
@ActiveProfiles({ "test" })
@EnableAutoConfiguration
@AutoConfigureMockMvc
class UpdateConfigControllerIT {...}
通过添加字符集来声明完全预期的内容类型:
.andExpect(content().contentType(new MediaType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8)))
或使用contentTypeCompatibleWith
:
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
只是一张小纸条;您可以安全地删除@ExtendeWith(SpringExtension.class)
注释,因为@SpringBootTest
批注已经用给定的批注进行了元批注。