spring 全局测试模拟静态方法

spring test mock static method globally

在 spring 测试中,我知道我可以使用 Mockito 模拟静态方法(通常是静态 util 方法:生成 id,从 Redis 获取值):

try (MockedStatic) {
}

但是在每个测试方法中都必须这样做既丑陋又麻烦,有什么办法可以做到这一切(我可以接受一个模拟行为)

我在想也许是 junit5 扩展,或 Mockito 扩展,这似乎是一个常见问题,我想知道是否有人尝试过任何成功的东西。

试试这个

public class StaticClassTest {

    MockedStatic<YourStatic> mockedStatic;

    @Before
    public void setup() {
        mockedStatic = Mockito.mockStatic(YourStatic.class);

        // if you want the same behavior all along.
        mockedStatic.when(() -> YourStatic.doSomething(anyString())).thenReturn("TEST");
    }
    
    @Test
    public void test_static() {
        // write your test here
    }


    @After
    public void teardown() {
        mockedStatic.close();
    }
}