Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法验证Spring控制器上的方法是使用Mockito调用的_Java_Spring_Unit Testing_Junit_Mockito - Fatal编程技术网

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

Java 有没有办法验证Spring控制器上的方法是使用Mockito调用的,java,spring,unit-testing,junit,mockito,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;

这是我的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();
因此,基本上我想断言,我期望被调用的方法就是被调用的方法。我知道这可以在我拥有的模拟服务对象(即inputValidationService)上完成,但我希望控制器也有类似的功能


请让我知道,如果有任何额外的细节,你想让我张贴

您可以使用@MockBean。这将使用Mockito bean,您可以使用standart Mockito函数,如“verify”


可能晚了,但我找到了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"));

MockMvc不是这样使用的。您应该在响应上验证(匹配)。@SotiriosDelimanolis我知道了,并且我在响应上也有断言。但我有多个映射返回相同的结果。就像我说的,我有其他断言,我希望被调用的方法正在被调用,但我想知道是否有一种方法可以断言正确的映射是由Mockito直接调用的。我并不关心MockMvc应该如何使用,这就像是一个技术上可能或不可能的问题。