这是我的Mockito测试:
@RunWith(MockitoJUnitRunner.class)
public class Controller_Test {
private MockMvc mockMvc;
@InjectMocks
private EmployeeController employeeController;
@Mock
private InputValidationService inputValidationService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(restController).build();
}
@Test
public void testGetEmployeeDetails() {
EmployeeController spy = Mockito.spy(employeeController);
MvcResult result = mockMvc.perform(get("/employee/details/9816")).andDo(print()).andExpect(status().isOk()).andReturn();
// Have some basic asserts here on the result that are working fine
}
}
现在我的问题是,有没有办法断言我期望在我的控制器中调用的方法实际上是被调用的。
我知道是这样,但是我如何使用单元测试断言它
例如这是我在控制器中的请求映射:
@RequestMapping(value = "/employee/details/{id}", produces = "application/json; charset=UTF-8", method = RequestMethod.GET)
@ResponseStatus( HttpStatus.OK)
@ResponseBody
public EmployeeDetails getEmployeeDetailsById(@PathVariable String employeeID) {
//Some business logic
}
现在我想做一些断言,比如:
Mockito.verify(spy, times(1)).getEmployeeDetailsById();
所以基本上我想断言,我期望被调用的方法就是被调用的方法。我知道这可以在我拥有的模拟服务对象(即 inputValidationService)上完成,但也希望控制器具有类似的东西。
如果您希望我发布任何其他详细信息,请告诉我。
也许晚了,但我发现org.springframework.test.web.servlet.result.HandlerResultMatchers可以验证正在调用正确的控制器和方法。 例如:
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.handler;
mockMvc
.perform(get("/employee/details/9816"))
.andExpect(handler().handlerType(EmployeeController.class))
.andExpect(handler().methodName("getEmployeeDetailsById"));
@MockBean.这将使用Mockito豆,您可以使用标准Mockito函数,如"verify"。
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-testing-spring-boot-applications-mocking-beans