
mock静态方法指引
在测试类上添加注解:
发布日期:2025-04-14 11:09:16
浏览次数:8
分类:精选文章
本文共 2169 字,大约阅读时间需要 7 分钟。
Mockito静态方法指南
升级Maven依赖
为了启用Mockito对静态方法的支持,您需要升级项目的依赖版本。以下是更新后的Maven依赖配置:
org.mockito mockito-core 3.6.28 test org.mockito mockito-inline 3.6.28 test org.mockito mockito-junit-jupiter 3.4.0 test
使用方法
静态方法调用
以下是一个简单的示例,展示如何使用Mockito来模拟静态方法:
public class MysteryBox { public static Optionalmystery(String codeWord) { // 待实现 }}
public class HaplessUser { public Mystery unleashMystery(String magicSpell) { Mystery om = MysteryBox.amaze(magicSpell); return om.orElseThrow(() -> new FailureToAmazeException("The box was empty")); }}
单元测试类中的静态方法模拟
在单元测试类中,使用Mockito来模拟静态方法:
@Test@DisplayName("应在失败揭开谜团时抛出异常")void testUncoverMysteries() { try (MockedStaticmb = Mockito.mockStatic(MysteryBox.class)) { mb.when(() -> MysteryBox.amaze(any(String.class))).thenReturn(Optional.empty()); assertThrows(FailureToAmazeException.class, () -> subjectUnderTest.unleashMystery("Abracadabra")); }}
常见异常及解决方法
在同一个测试类中,多个测试方法可能需要模拟同一个静态方法时,可能会遇到以下异常:
org.mockito.exceptions.base.MockitoException: For xx.xxxx.util.SpringUtil, static mocking is already registered in the current thread
解决方法
为了解决这个问题,可以采取以下步骤:
@TestInstance(PER_CLASS)@ExtendWith(MockitoExtension.class)public class KonfigurationCopyServiceTest { @InjectMocks private EKonfigurationCopyServiceImpl konfigurationCopyServiceImpl; @MockBean private FileProcessRecordServiceImpl fileProcessRecordService; @BeforeAll public void setUp() { MockedStaticmockSpringUtil = Mockito.mockStatic(SpringUtil.class); mockSpringUtil.when(() -> SpringUtil.getActiveProfile()).thenReturn("dev"); } @BeforeEach public void init() { // 其他方法的模拟 } @Test void test1() { // 测试方法内容 } @Test void test2() { // 测试方法内容 }}
总结
通过以上方法,您可以轻松地在测试类中使用Mockito来模拟静态方法。记得在多个测试方法中使用静态方法时,确保在每个测试方法开始时重新初始化静态 mock,以避免上述异常。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年05月18日 11时57分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mapping文件目录生成修改
2025-04-11
MapReduce Java API-多输入路径方式
2025-04-11
MapReduce与HDFS企业级优化
2025-04-11
MapReduce实现二度好友关系
2025-04-11
MapReduce的模式、算法和用例
2025-04-11
MapReduce的编程思想(1)
2025-04-12
MapReduce程序依赖的jar包
2025-04-12
MapReduce程序(一)——wordCount
2025-04-12
MapReduce:大数据处理的范式
2025-04-12
MapStruct 对象间属性复制
2025-04-12
MapStruct 映射过程中忽略某个字段
2025-04-12
MapStruct 超神进阶用法,让你的代码效率提升十倍!
2025-04-12
MapXtreme 2005 学习心得 一些基础函数代码(四)
2025-04-12
Map中key和value值是否可以为null或空字符串?
2025-04-12
map和bean的相互转换
2025-04-12
map和filter使用方法与区别
2025-04-12
Map如何获取所有value的值
2025-04-12
Map排序
2025-04-12
Map的深浅拷贝的探究
2025-04-12
Map的遍历方式
2025-04-12