有没有办法验证 Spring 控制器上的方法是否是使用 Mockito 调用的



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

相关内容

  • 没有找到相关文章

最新更新