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

时间:2016-07-08 04:33:16

标签: java spring unit-testing junit 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:

@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();

所以基本上我想断言我期望被调用的方法是被调用的方法。我知道这可以在我拥有的Mock Service对象上完成,即inputValidationService,但是对于控制器也需要类似的东西。

如果您希望我发布任何其他详细信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

也许迟到了,但我找到了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"));

答案 1 :(得分:0)

你可以使用@MockBean.This将使用Mockito bean,你可以使用它和#34;验证"等标准Mockito函数。

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-testing-spring-boot-applications-mocking-beans