Mockito:如何验证非静态方法中调用的静态方法?
解决Mockito验证静态方法调用的问题
你需要在MockedStatic的作用域内创建Animal类的实例并调用move()方法,以此触发静态方法getRandomNumber的调用,之后再执行验证逻辑。完整的测试代码如下:
import org.junit.jupiter.api.Test; import static org.mockito.Mockito.times; import static org.mockito.Mockito.mockStatic; @Test void tryVerifyStaticMethod() { try (MockedStatic<Animal> mockedStatic = mockStatic(Animal.class)) { // 创建Animal实例并调用move方法,触发静态方法调用 Animal animal = new Animal(); animal.move(); // 验证静态方法getRandomNumber是否以参数1、10被调用了1次 mockedStatic.verify(() -> Animal.getRandomNumber(1, 10), times(1)); } }
关键说明:
try-with-resources语法会自动管理MockedStatic的生命周期,测试结束后自动关闭静态mock,避免干扰其他测试用例。- 必须在
MockedStatic的作用域(try代码块内部)内调用move()方法,这样Mockito才能捕获到静态方法的调用行为。 - 如果需要自定义静态方法的返回值(比如让
getRandomNumber固定返回某个值,方便验证counter的变化),可以在调用move()前添加mockedStatic.when(() -> Animal.getRandomNumber(1, 10)).thenReturn(5);这类语句。
内容的提问来源于stack exchange,提问作者jvatechs
相关产品推荐
相关产品推荐

