tal*_*a06 3 junit spring spring-mvc mockito junit5
我尝试测试一个名为loadData定义的方法,MainController该方法以字符串形式返回结果。尽管当 Web 应用程序在 servlet 容器上运行时(或当我调试代码时),此方法实际上返回数据,但当我从基于JUnit 5with的测试类调用它时,没有数据返回Mockito。
这是我的配置:
@ContextConfiguration(classes = {WebAppInitializer.class, AppConfig.class, WebConfig.class})
@Transactional
@WebAppConfiguration
public class TestMainController {
@InjectMocks
private MainController mainController;
private MockMvc mockMvc;
@BeforeEach
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(this.mainController).build();
}
@Test
public void testLoadData() throws Exception {
MvcResult mvcResult = mockMvc
.perform(MockMvcRequestBuilders.get("/loadData.ajax"))
.andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
Assertions.assertNotNull(mvcResult.getResponse().getContentAsString(), "response should not be null");
}
}
Run Code Online (Sandbox Code Playgroud)
java.lang.NullPointerException由于原样,this.mainController测试失败null。
环境详情:
Spring version: 5.0.3
JUnit version: 5.0.3
mockito version: 1.9.5
hamcrest version: 1.3
json-path-assert version: 2.2.0
Run Code Online (Sandbox Code Playgroud)
编辑:这是loadData方法MainController:
@RequestMapping(value = "/loadData.ajax", method = RequestMethod.GET)
public String loadData(HttpServletRequest request, HttpServletResponse response) {
List list = mainService.loadData(); // starts a transaction and invokes the loadData method of mainDAO repository which basically loads data from the database
return JSONArray.fromObject(list).toString();
}
Run Code Online (Sandbox Code Playgroud)
您可以直接调用控制器方法,就像我们对服务方法所做的那样,但不建议这样做。使用 MockMvc,您可以检查标头和请求参数映射是否正确。另外,您还可以检查端点映射是否正确。加上请求方法也是正确的。如果直接调用控制器方法来测试代码,则无法测试所有这些。
您可以尝试的一件事是,不要在独立上下文中创建新对象,而是使用 Mock。IE
mockMvc = MockMvcBuilders.standaloneSetup(this. mainController).build();
Run Code Online (Sandbox Code Playgroud)
打电话时,执行以下操作
MvcResult mvcResult = mockMvc
.perform(MockMvcRequestBuilders.get("/loadData.ajax"))
.andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
Run Code Online (Sandbox Code Playgroud)
断言,你想要什么
Assert.assertEquals("response does not match", mvcResult.getResponse().getContentAsString(),
"some expected response");
Run Code Online (Sandbox Code Playgroud)
您收到 null 或 400 或 404 http 状态?
如果您收到 400,请检查标头和请求。参数(如果有)正确。如果您收到 404,请检查 URL 路径。/loadData.ajax ,假设这是控制器方法中的请求映射路径。
| 归档时间: |
|
| 查看次数: |
6224 次 |
| 最近记录: |