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

时间:2019-05-31 07:22:07

标签: java junit mockito powermock junit5

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

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

我知道JUnit 5不支持PowerMock,但我想知道也许至少对于标准API(例如日期)有解决方案。

现在我正在用Instant嘲笑Mockito.any()实例,因为它通过了错误的Instant不会失败,所以测试不会失败。

1 个答案:

答案 0 :(得分:4)

您可以将当前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();