J'ai une classe Sut
avec une initialisation paresseuse mise en œuvre à l'aide de java.util.function.Supplier
. En fait, il est plus compliqué que le code ci-dessous, mais c'est la forme la plus simple que Mockito ne peut pas tester. Le test ci-dessous génère une erreur Wanted but not invoked ... However, there were other interactions with this mock
. Pourquoi Mockito ne compte-t-il pas l'invocation de create
? Le flux de code entre en fait dans create()
J'ai vérifié avec le débogueur.
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();
}
}
}