当前位置: 首页 > 知识库问答 >
问题:

JUnit 5模拟YearMonth.now但调用YearM的真实方法onth.from

郑锋
2023-03-14

我的用例是,我正在使用JUnit 5,需要模拟静态方法YearMonth.now()。为了做到这一点,我使用的解决方案是:

YearMonth defaultYearMonth = YearMonth.of(DEFAULT_YEAR, Month.MARCH);
try (MockedStatic<YearMonth> mockedScope = Mockito.mockStatic(YearMonth.class)) {
    mockedScope.when(YearMonth::now).thenReturn(defaultYearMonth);
    // Rest of the code
    // StepVerifier to verify a subscription
}

mockedScope.when(() -> YearMonth.from(any())).thenCallRealMethod();

但这不起作用,我得到了null,其中YearMonth是。调用from(LocalDateTime)。

我不确定我错过了什么。如果可能是由于嘲笑YearMonth类,是否有办法监视静态方法?如果没有,有关如何使用JUnit 5实现这一点的任何帮助将非常有帮助。

共有1个答案

史磊
2023-03-14

如果您查看M的Javadocockito.mock静态(类

为给定类或接口的所有静态方法创建线程本地模拟控制器。[...]

修复它的方法是根据Javadoc为您的mockStatic方法使用一个额外的参数。第二个参数是defaultAnswer

defaultAnswer–调用静态方法时的默认答案。

MockedStatic<YearMonth> mockedScope = Mockito.mockStatic(YearMonth.class, Mockito.CALLS_REAL_METHODS)

 类似资料:
  • 我试图为一个类编写一个单元测试,这个类使用带有库中的的Google vision API。问题是,由于某种原因,我的模拟仍然调用真正的方法,然后抛出一个NPE,这破坏了我的测试。我以前从未在模拟上见过这种行为,我想知道我是不是做错了什么,是不是Spock/Groovy中有bug,还是与Google lib有关?

  • 我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。

  • 是什么导致真正的实现被调用,我如何防止它?

  • 问题内容: 我正在尝试使用Mockito 1.8.5存根方法,但是这样做会调用实际方法实现(以“”作为parm值),从而引发异常。 我尝试模拟的方法如下所示。没有最终方法或类。 我正在传递模拟的类如下所示: 是什么导致真正的实现被调用,我该如何防止呢? 问题答案: Mockito代码无法访问您正在模拟的方法。 因为测试代码和被测代码在同一程序包中,所以编译器允许您以这种方式设置模拟,但是在运行时,

  • 但是不知何故,method3()并没有被嘲笑,我仍然看到它打印的内容。但是,我可以成功地模拟method2()。也许是因为method2()是从method1()直接调用的,我正在测试的方法是什么?请建议我如何模拟方法3。 谢谢,梅赫