在Spring测试中,我知道可以使用Mockito模拟静态方法(通常是静态工具方法:生成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();
}
}
MockedStatic
的标准实践,就像在 SQL 查询后关闭 DB 连接一样。因此,您可以在每个测试用例中使用try-with-resources
(就像您的示例)或者使用我的答案。更多信息请参见:https://www.baeldung.com/mockito-mock-static-methods#mocking-a-no-argument-static-method - Kai-Sheng Yang