首页 > 解决方案 > 运行 mockmvc 测试时无法模拟函数

问题描述

我正在使用 mockmvc 编写控制器的测试用例

@Mock
private AService aService;

@InjectMocks
private AController aController;



@BeforeEach
    public void init() {
        MockitoAnnotations.initMocks(this);
        mockMvc = MockMvcBuilders
                .standaloneSetup(aController)
                .setCustomArgumentResolvers(putAuthenticationPrincipal)  // for passing the authentication principal
                .build();
    }

现在当我尝试测试时

@Test
    public void testfunction() throws Exception {
        String id = UUID.randomUUID().toString();
  Mockito.when(aService.getAccount(Mockito.anyString())).thenThrow(new Exception("not avalible"));
        mockMvc.perform(MockMvcRequestBuilders.get("/account/{id}", id)
....      
   }

在这个 aService.getAccount() 没有得到模拟。这就是为什么我没有得到想要的结果..

我不明白为什么在这种情况下模拟函数不起作用。

标签: mockitomockmvc

解决方案


在 a@WebMvcTest中,您不应该创建控制器的模拟。Spring 需要在其上下文中创建一个控制器,并将协作服务注入其中。

要做到这一点:

  • 用注释测试类@WebMvcTest(YourController.class)
  • @MockBean用, not注释协作服务@Mock

推荐阅读