我的用例是,我正在使用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实现这一点的任何帮助将非常有帮助。
如果您查看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。 谢谢,梅赫