【发布时间】:2022-11-04 02:07:39
【问题描述】:
所以我正在尝试向我的 API 添加集成测试,我通过 Postman 测试了所有 GET/POST/PUT.. 方法,它们都可以工作,但是我无法让它们在带有 mockito 的 JUnit 上工作,有什么想法吗?
@SpringBootTest
@AutoConfigureMockMvc
public class ResponseStatusControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
private String content;
@BeforeEach
public void setup() {
this.mockMvc = MockMvcBuilders.standaloneSetup(new NsaController())
.build();
try(FileInputStream inputStream = new FileInputStream("\\java\\resources\\post.json")) {
content = IOUtils.toString(inputStream);
}catch (Exception e){
e.printStackTrace();
}
}
@Test
public void endpointTest() throws Exception {
this.mockMvc.perform(post("/api/v1/nsascholarship",content)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk());}
}
代码应该获取 JSON 数据并将其发布到 H2 数据库,但是根据我给出 JSON 对象(在字符串中)的方式,我得到:
预期状态:<200> 但原为:<400>(400 是提供的数据在应该有数据的地方有空值)
我的假设是由于某种原因我错误地提供了 JSON 正文,并且该方法无法将其添加到数据库中。
TLDR; Post 请求适用于 Postman,不适用于 Junit。我认为这是因为我没有通过测试方法正确提供 JSON 内容,有什么想法吗?
【问题讨论】:
-
换句话说,实时代码表明测试被破坏了。测试策略就这么多...
-
不会同意的。所有功能都按预期工作,这是我第一次在项目中实施集成测试。 Postman 是一个 UI,因此在使用它设置测试时显然更容易使用。
-
您是否在调试器中检查了
content以查看 JSON 是否被正确读取?控制台输出是否显示来自 API 调用(“服务器”端)的解析/绑定的任何错误消息? -
检查响应的内容(正文),看看是否有任何有用的东西可以帮助您进行故障排除。请参阅this answer 了解如何执行此操作。
-
是的,JSON 字符串本身被正确读取,不存在任何解析/绑定问题。
标签: java spring testing mocking spring-test