首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JUnit 5模拟YearMonth.now但调用YearMonth.from的实方法

JUnit 5模拟YearMonth.now但调用YearMonth.from的实方法
EN

Stack Overflow用户
提问于 2021-04-06 10:30:23
回答 1查看 285关注 0票数 1

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

代码语言:javascript
复制
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
}

现在的问题是,由于在模拟作用域中模拟YearMonth,所以不能对所有其他方法进行模拟。但我想为YearMonth.from()调用真正的方法。要做到这一点,我所做的就是尝试添加

代码语言:javascript
复制
mockedScope.when(() -> YearMonth.from(any())).thenCallRealMethod();

但是这不起作用,我得到了调用nullYearMonth.from(LocalDateTime)

我不知道我错过了什么。如果可能是因为模拟YearMonth类,那么是否有办法监视静态方法?如果没有任何帮助,如何用JUnit 5实现这一点将是非常有帮助的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-06 10:55:55

如果您查看Mockito.mockStatic(Class<T>)的Javadoc,您将看到所有静态方法都是模拟的,这意味着如果在测试范围内使用它们,则需要手动处理它们。

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

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

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

代码语言:javascript
复制
MockedStatic<YearMonth> mockedScope = Mockito.mockStatic(YearMonth.class, Mockito.CALLS_REAL_METHODS)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66966931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档