2017-10-05 4 views
1

Le javadoc pour EasyMock.andVoid() lecture de la façon suivanteQuel est le but de EasyMock.andVoid()?

Enregistre un appel, mais ne renvoie rien. . Utilisé pour enchaîner les appels sur les méthodes vides expectLastCall() andThrow (e) .andVoid()

Retours:

cet objet pour permettre d'appel de méthode chaining.lockquote

Connaissez-vous situation possible dans laquelle on a besoin de cela? Quel est le but de andVoid() dans l'exemple ci-dessus?

Considérons:

myMock.myMethod(); 
expectLastCall().andVoid().andThrow(e) 

Avec myMethod ayant le type de retour void. Ensuite, nous pourrions simplement omettre le 'chain-element' andVoid.

Répondre

0

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.

+0

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

+0

@ Chris311 Oui. Je connais. C'est là plus pour completude. Et si vous aimez enchaîner les attentes. – Henri

0

Le related API docs va comme ceci:

Enregistre un appel, mais ne renvoie rien. Utilisé pour enchaîner les appels sur vides méthodes expectLastCall(). AndThrow (e) .andVoid()

Le point est d'enregistrer un appel. Plus tard, l'appel verify peut vérifier si cet appel est arrivé.