作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 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
}
}
现在我的问题是,有没有办法断言我期望在 Controller 中调用的方法实际上已被调用。
我知道是这样,但是我如何通过单元测试来断言它
例如这是我在 Controller 中的 RequestMapping:
@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)上完成,但也希望 Controller 有类似的东西。
如果您希望我发布任何其他详细信息,请告诉我。
最佳答案
也许晚了,但我发现 org.springframework.test.web.servlet.result.HandlerResultMatchers 可以验证正在调用正确的 Controller 和方法。例如:
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"));
关于java - 有没有办法验证 Spring Controller 上的方法是使用 Mockito 调用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38258950/
我是一名优秀的程序员,十分优秀!