我正在使用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()不会被模拟。这就是为什么我没有得到期望的结果。.
我不明白为什么在这种情况下无法模拟功能。
在@WebMvcTest中,不应创建控制器的模拟。 Spring需要在其上下文中创建一个控制器,然后向其中注入协作服务。
为此:
@WebMvcTest(YourController.class)
注释测试类@MockBean
而不是@Mock
注释协作服务>