在运行模拟测试时无法模拟功能

问题描述 投票:0回答:1

我正在使用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()不会被模拟。这就是为什么我没有得到期望的结果。.

我不明白为什么在这种情况下无法模拟功能。

mockito mockmvc
1个回答
0
投票

在@WebMvcTest中,不应创建控制器的模拟。 Spring需要在其上下文中创建一个控制器,然后向其中注入协作服务。

为此:

  • @WebMvcTest(YourController.class)注释测试类
  • @MockBean而不是@Mock注释协作服务>
© www.soinside.com 2019 - 2024. All rights reserved.