java - 如何使用 JUnit 5 测试调用 Instant.now() 的代码?

标签 java junit mockito powermock junit5

我有一段代码看起来像这样:

MyObject getMyObject() {
    Instant now = Instant.now();
    return myService.doSomething(now);
}

我知道 PowerMock 在 JUnit 5 中不受支持,但我想知道至少对于像日期这样的标准 API 是否有解决方案。

现在我正在用 Mockito.any() 模拟 Instant 实例,这是不正确的,因为如果我传递错误的 Instant 我的测试不会失败

最佳答案

您可以将当前 Instant 的创建移动到包级别方法:

MyObject getMyObject() {
    Instant now = getCurrentInstance();
    return myService.doSomething(now);
}

Instant getCurrentInstant(){
  Instant.now();
}

然后在您的测试中,您可以监视 SUT 并模拟 getCurrentInstant 方法:

Sut sut = spy(new Sut());
doReturn(testInstance).when(sut).getCurrentInstant();

sut.getMyObject();

这是我在 Mockito Spying 上写的一篇文章如果您需要进一步阅读。

关于java - 如何使用 JUnit 5 测试调用 Instant.now() 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56390522/

相关文章:

java - 在ant中自定义AnsiColorLogger的颜色?

java - EJB、JPA 和 Eclipse 的连接问题

java - 使用hamcrest匹配Map包含不同类型的条目

android - RxJava2 : . andThen() 被调用,即使第一个 Completable 发出错误

java - Android 测试 - Robolectric + Mockito + Retrofit 出现 Wanted 但未调用错误

java - 如何使用mockito框架获取返回的对象

java - 如何在 JSP 页面中显示集合项

java - 字符串 999999999.9999999999 四舍五入为 1,000,000,000 BigDecimal

java - 使用 hamcrest 检查列表是否包含特定顺序的类实例

android - 两个 robotium 测试用例,但第二个卡在那里没有响应(在 JUnit View 中)