spring - 如何在 Spring 集成测试中模拟注入服务的方法
问题描述
我有以下服务类,我想测试
@Service
public class MasterService {
@Inject
private ServiceOne serviceOne;
@Autowired
private ServiceTwo serviceTwo;
@Inject
private ServiceThree serviceThree;
@VisibleForTesting
void execute() {
if (serviceThree.isFlag()) {
....
}
}
我正在测试execute()
方法。我想模拟serviceThree.isFlag()
返回true。以下是我的测试。
public class MasterServiceIT{
@Inject
private MasterService masterService;
@Inject
private ServiceThree serviceThree;
@Test
public void testMasterService() {
when(serviceThree.isFlag()).thenReturn(true); <---- this never works
masterService.execute();
}
}
但是,它永远不会检索到 true。有什么意见吗?我想使用@InjectMocks
然后我可以只注入我嘲笑的这个服务吗?或者如果我正在使用,我需要模拟每个服务@InjectMocks
解决方案
您确定需要模拟集成测试吗?好吧,有时我们需要模拟一些服务,这些服务引用了一些外部服务,如 SharePoint 等。好吧,如果你需要模拟,那么在这种情况下,你需要在 spring 上下文中模拟 spring 服务 bean。你可以通过@MockBean
推荐阅读
- python - lambda函数中使用的函数内的打印语句未执行
- unix - 删除多个空格 - Unix 脚本
- javascript - 如何在 jQuery Accordions 中实现即时搜索
- matplotlib - 显示箱线图可视化的 pandas 数据框的分层绘图
- firebase - firebase 规则(集合的其余部分)
- facebook-graph-api - 是否可以获取页面帖子的作者姓名?
- python - 如何使用 usb2can 接口设置 Python canopen?
- node.js - IBM Cloud 与 Cloud Foundry:node-gzip 不压缩缓冲区
- android - 如何在 Android 9 Api 28 中使用 HttpsUrlConnection 写入远程服务器上的 .txt 文件
- sql - 通过取两行之间的差异计算的 Athena (Presto) 表中添加一个新列