博客
关于我
mock静态方法指引
阅读量:800 次
发布时间:2023-02-09

本文共 2129 字,大约阅读时间需要 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 Optional
mystery(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 (MockedStatic
mb = 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() {        MockedStatic
    mockSpringUtil = Mockito.mockStatic(SpringUtil.class); mockSpringUtil.when(() -> SpringUtil.getActiveProfile()).thenReturn("dev"); } @BeforeEach public void init() { // 其他方法的模拟 } @Test void test1() { // 测试方法内容 } @Test void test2() { // 测试方法内容 }}

    总结

    通过以上方法,您可以轻松地在测试类中使用Mockito来模拟静态方法。记得在多个测试方法中使用静态方法时,确保在每个测试方法开始时重新初始化静态 mock,以避免上述异常。

    转载地址:http://fbffk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现Adler32算法(附完整源码)
    查看>>
    Objective-C实现AES算法(附完整源码)
    查看>>
    Objective-C实现AffineCipher仿射密码算法(附完整源码)
    查看>>
    Objective-C实现aliquot sum等分求和算法(附完整源码)
    查看>>
    Objective-C实现all combinations所有组合算法(附完整源码)
    查看>>
    Objective-C实现all permutations所有排列算法(附完整源码)
    查看>>
    Objective-C实现all subsequences所有子序列算法(附完整源码)
    查看>>
    Objective-C实现AlphaNumericalSort字母数字排序算法(附完整源码)
    查看>>
    Objective-C实现alternate disjoint set不相交集算法(附完整源码)
    查看>>
    Objective-C实现alternative list arrange备选列表排列算法(附完整源码)
    查看>>
    Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
    查看>>
    Objective-C实现anagrams字谜算法(附完整源码)
    查看>>
    Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
    查看>>
    Objective-C实现area under curve曲线下面积算法(附完整源码)
    查看>>
    Objective-C实现argmax函数功能(附完整源码)
    查看>>
    Objective-C实现arithmetic算术算法(附完整源码)
    查看>>
    Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
    查看>>
    Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现average absolute deviation平均绝对偏差算法(附完整源码)
    查看>>