mockito - 运行 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() 没有得到模拟。这就是为什么我没有得到想要的结果..
我不明白为什么在这种情况下模拟函数不起作用。
解决方案
在 a@WebMvcTest
中,您不应该创建控制器的模拟。Spring 需要在其上下文中创建一个控制器,并将协作服务注入其中。
要做到这一点:
- 用注释测试类
@WebMvcTest(YourController.class)
@MockBean
用, not注释协作服务@Mock
推荐阅读
- vue.js - Vuetify 如何对 v-data-table 中的自定义单元格进行排序?
- python - AttributeError:“CustomAugment”对象在保存 TensorFlow 模型时没有属性“__name__”
- jenkins - 无法在詹金斯管道脚本中运行 python 命令
- java - 提取字符串的 OTP 部分的最佳方法是什么,如下所示
- cube.js - 如何创建不是聚合数据的度量?
- android - android.database.CursorIndexOutOfBoundsException:请求索引 -1,大小为 0 AT API 29+
- python - 添加新数据、更新现有数据和删除缺失数据的算法
- sql - 如何获取前 3 种类型的每组的值
- python - “[Errno 2] No such file or directory”在 SSH 会话中执行的 Python 脚本中保存到另一个驱动器时
- javascript - 有没有办法让文本输入垂直对齐?