C'est vraiment rare ce dont vous aurez besoin. Parce que dans la plupart des cas, il suffit d'appeler la méthode void pour se moquer d'elle. Comme cette
MyClass myMock = mock(MyClass.class);
myMock.myMethod();
replay(myMock);
myMock.myMethod(); // one call to myMethod expected
verify(myMock);
Ce qui est synonyme de
MyClass myMock = mock(MyClass.class);
myMock.myMethod();
expectLastCall();
replay(myMock);
myMock.myMethod(); // one call to myMethod expected
verify(myMock);
Alors disons que vous voulez que le premier appel à myMethod
de lancer une exception et la seconde à répondre normalement, vous pouvez le faire.
MyClass myMock = mock(MyClass.class);
myMock.myMethod();
expectLastCall().andThrow(new RuntimeException("test"));
expectLastCall().andVoid();
replay(myMock);
try {
myMock.myMethod(); // one call to myMethod will throw an exception
fail("should throw");
} catch(RuntimeException e) {}
myMock.myMethod(); // the other will be normal
verify(myMock);
Ou en les enchaînant
MyClass myMock = mock(MyClass.class);
myMock.myMethod();
expectLastCall().andThrow(new RuntimeException("test")).andVoid();
replay(myMock);
try {
myMock.myMethod(); // one call to myMethod will throw an exception
fail("should throw");
} catch(RuntimeException e) {}
myMock.myMethod(); // the other will be normal
verify(myMock);
Ce cas d'utilisation est bien sûr super rare, mais nous soutenons encore.
Juste un petit commentaire: Au lieu de 'expectLastCall(). AndVoid();' on pourrait juste écrire 'myMock.myMethod();'. Ainsi, l'utilisation de '.andVoid()' n'est pas nécessairement nécessaire. – Chris311
@ Chris311 Oui. Je connais. C'est là plus pour completude. Et si vous aimez enchaîner les attentes. – Henri