我正在为调用服务的遗留 spring 控制器代码创建 junit 测试用例(创建服务调用的新实例而不是 autowire/spring bean)。我希望模拟服务类调用。请告知是否可能。
更改旧代码不是我的选择。
public class WebController {
@PostMapping("/api/op1")
public @ResponseBody String validate(ModelMap model,HttpSession session,HttpServletRequest request){
---
--
Service service = new Service();
service.invoke(param1,param2);
----
---
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class WebControllerTest{
private MockMvc mockMvc;
private WebController classUnderTest;
@Test
public void validat() throws Exception {
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
//Service service = spy(Service.class);
//doReturn(new ServiceCallResponse()).when(service).validate( any(String.class),any(String.class));
Service service = Mockito.mock( Service.class, CALLS_REAL_METHODS );
doReturn(new ServiceCallResponse()).when(service).validate(any(String.class),any(String.class));
MvcResult result = mockMvc.perform(
post("/validate").params(params).session(new MockHttpSession()))
.andExpect(status().isOk())
.andReturn();
}
}
Spy 和 Mocktio 调用真实方法选项不起作用。请让知道如何模拟它。