Spring boot 带有Mockito测试用例的Spring引导控制器问题
我对Mockito完全陌生,我必须为我的REST控制器编写一个测试用例,但我不确定应该从哪里开始。任何帮助都将不胜感激。我已经根据给出的建议更新了控制器 这是我的控制器:Spring boot 带有Mockito测试用例的Spring引导控制器问题,spring-boot,junit,mockito,dto,Spring Boot,Junit,Mockito,Dto,我对Mockito完全陌生,我必须为我的REST控制器编写一个测试用例,但我不确定应该从哪里开始。任何帮助都将不胜感激。我已经根据给出的建议更新了控制器 这是我的控制器: @RestController @RequestMapping("/api") public class TestController { @Autowired TestService _testService; @RequestMapping(value = "/getsearchDetailCourse", method
@RestController
@RequestMapping("/api")
public class TestController {
@Autowired
TestService _testService;
@RequestMapping(value = "/getsearchDetailCourse", method = RequestMethod.GET)
public List<TestDto> getsearchDetailCourse(@RequestParam("courseName") String courseName,
@RequestParam("courseId") Long courseId) throws Exception {
return (List<TestDto>) _testService.searchDetailCourse(courseName, courseId);
}
}
这是我的测试:
@RunWith(SpringRunner.class)
@WebMvcTest(value = TestController.class, secure = false)
public class TestMethod {
@Autowired
private MockMvc mockMvc;
@MockBean
private TestService testService;
TestDto testDto = new testDto("Test",2744L);
@Test
public void retrieveDetailsForCourse() throws Exception {
Mockito.when(
testService.searchDetailCourse(Mockito.anyString(),
,Mockito.anyLong())).thenReturn(testDto);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
"/api/getsearchDetailCourse").accept(
MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
System.out.println(result.getResponse());
String expected = "[{\"numberOfCourse\":\"Testing1\",\"courseId\":2744},{\"numberOfCourse\":\"Testing2\",\"courseId\":2744}]";
JSONAssert.assertEquals(expected, result.getResponse()
.getContentAsString(), false);
}
}
我想测试控制器,请帮我更正上面的测试用例。您错过了Spring的全部要点,即依赖注入。您不能执行
newtestservice()
。相反,您必须告诉Spring将TestService注入到您的控制器中。这就是允许在您的测试中注入模拟测试服务的原因(其中有几个好处)。目前这是不可能的,因为每次你调用你的方法时,它都会创建一个新的TestService,因此永远不会使用任何模拟。我已经更新了我的控制器,但我的测试方法不起作用,请帮助你准确地定义“不起作用”。也就是说,您让服务返回一个DTO,并且您希望收到一个包含两个DTO的JSON数组。那怎么行?为什么它还要编译?如果服务应该返回一个列表,那么它的返回类型应该是list,让它返回一个DTO甚至不应该编译。
@RunWith(SpringRunner.class)
@WebMvcTest(value = TestController.class, secure = false)
public class TestMethod {
@Autowired
private MockMvc mockMvc;
@MockBean
private TestService testService;
TestDto testDto = new testDto("Test",2744L);
@Test
public void retrieveDetailsForCourse() throws Exception {
Mockito.when(
testService.searchDetailCourse(Mockito.anyString(),
,Mockito.anyLong())).thenReturn(testDto);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
"/api/getsearchDetailCourse").accept(
MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
System.out.println(result.getResponse());
String expected = "[{\"numberOfCourse\":\"Testing1\",\"courseId\":2744},{\"numberOfCourse\":\"Testing2\",\"courseId\":2744}]";
JSONAssert.assertEquals(expected, result.getResponse()
.getContentAsString(), false);
}
}