首页 > 解决方案 > 使用 Mockito.mockStatic 模拟静态方法时出现 UnfinishedStubbingException

问题描述

使用 .mockLocalDate.now()静态方法时出现此异常Mockito.mockStatic()

org.mockito.exceptions.misusing.UnfinishedStubbingException:此处检测到未完成的存根:在 utils.PowerMockTest.test(PowerMockTest.java:18)

例如 thenReturn() 可能会丢失。
正确的存根示例:when(mock.isOk()).thenReturn(true); when(mock.isOk()).thenThrow(异常); doThrow(exception).when(mock).someVoidMethod(); 提示:

  1. 缺少 thenReturn()
  2. 您正在尝试存根不支持的最终方法
  3. 在“thenReturn”指令完成之前,您正在对内部另一个模拟的行为进行存根

代码是

public class MockStaticTest {
    @Test
    void test(){
        LocalDate today=LocalDate.of(2020,11,20);
        try (MockedStatic mocked = mockStatic(LocalDate.class)) {
            mocked.when(LocalDate::now).thenReturn(LocalDate.of(2020,11,10));
            Assertions.assertEquals(today,LocalDate.now());
            mocked.verify(atLeastOnce(),LocalDate::now);
        }
    }
}

我对异常消息有点困惑,因为我当然添加了thenReturn声明。
任何帮助,将不胜感激。

标签: javaunit-testingmockito

解决方案


你有没有尝试过 mocked.when(LocalDate.now()).thenReturn(LocalDate.of(2020,11,10)); ?


推荐阅读