我正在尝试做类似的事情:
mockMvc
.perform(post("/forums/{forumId}/register", 42L)
.contentType("application/json")
.param("sendWelcomeMail", "true")
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isOk());
但是 .content 方法在 5.2.6 中消失了,现在似乎有一个 body(( 函数:
mockMvc
.perform(post("/conversions/ktoc")
.contentType(MediaType.APPLICATION_JSON)
.body(objectMapper.writeValueAsString(request)). /*missing method to get back to Builder*/
.andExpect(status().isOk());
有人可以帮忙吗,我在网络上找到的所有示例都指向使用 content(..( 方法
根据文档,Spring Test 5.2.6 中应该仍然有.content()
方法。
您的代码可能发生的情况是,您从org.springframework.mock.http.server.reactive.MockServerHttpRequest.post
导入了MockMvcRequestBuilders
的反应式版本,这确实没有.content()
方法,而只有.body()
。
因此,请确保您在测试中导入 servlet 版本:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest
class PublicControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testMe() throws Exception {
this.mockMvc
.perform(post("/test").content("Some content"))
.andExpect(status().isOk());
}
}