【发布时间】:2019-11-08 21:03:23
【问题描述】:
我有一个类Sut 使用java.util.function.Supplier 实现了延迟初始化。事实上它比下面的代码更复杂,但这是 Mockito 无法测试的最简单的形式。下面的测试会引发错误Wanted but not invoked ... However, there were other interactions with this mock。为什么 Mockito 不计算 create 的调用?代码流实际进入create();我用调试器检查过。
import java.util.function.Supplier;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class TestTimes {
@Test
public void testCreateOnlyOnce() {
Sut sut = spy(new Sut());
sut.getData();
sut.getData();
sut.getData();
verify(sut, times(1)).create();
}
private static class Sut {
Supplier<Object> data = this::create;
void getData() {
data.get();
}
Object create() {
return new Object();
}
}
}
【问题讨论】:
-
我不知道答案,但我只想说这可能是我见过的mcve 最好的例子之一(最小、完整和可验证的例子)在这个网站上看到。