gpt4 book ai didi

java - 有没有办法验证 Spring Controller 上的方法是使用 Mockito 调用的

转载 作者:行者123 更新时间:2023-12-02 03:29:49 37 4
gpt4 key购买 nike

这是我的 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com