2009-12-29 4 views

Répondre

11

Par défaut, Easymock lève une exception pour toutes les méthodes appelées pour lesquelles vous n'avez pas explicitement défini d'attentes.

14

De EasyMock documentation:

Belle Mocks

Sur un Mock Object retourné par simulation() le comportement par défaut pour toutes les méthodes est de jeter un AssertionError pour tous les appels non prévus. Si vous voulez un objet "sympa" qui, par défaut, autorise tous les appels de méthode et renvoie des valeurs vides appropriées (0, null ou false), utilisez plutôt niceMock().

Donc ce que vous demandez est le comportement par défaut.

+0

Je trouve le comportement par défaut agaçant car vous finissez très facilement par "exiger" dans le test que le code testé est inefficace. J'ai déjà fait un simple refactor de déplacer un appel getSomething() en dehors d'une boucle, ce qui a fait échouer le test parce que je n'ai pas appelé getSomething 40 fois (!), Et les mocks "non sympas" encouragent ce type de test échouerait si je m'attendais à un seul appel avant le refactoring). –

+1

@Stein: convenu. Les tests unitaires doivent être à grain fin, idéalement tester une seule chose. Les mocks "non-sympathiques" découragent cela. –

+1

D'après ma lecture de la question, le PO veut un simulacre qui échouera à la vérification s'il est appelé. Les jolies mocks ne sont pas ce que l'OP veut, car quand un joli simulacre est appelé pendant les tests, il passe encore la vérification. –

14

Je sais que cette question est très ancienne, mais j'ai eu la même question que l'OP et a fait quelques recherches. J'ai trouvé la solution suivante:

En ajoutant .andThrow(new AssertionFailedError()).anyTimes(); à la fin de votre déclaration EasyMock, le test échouera lorsque la méthode simulée est appelée. La raison pour laquelle cela vaut mieux que de ne pas utiliser NiceMock et de laisser échouer le test en raison de l'appel de méthode non débloqué est que cela vous permet de tester spécifiquement que la méthode XYZ n'a pas été appelée dans le scénario donné.

Je voudrais donner David Wallace crédit pour cette réponse. J'ai trouvé cette solution dans sa réponse sur le post suivant: Test that void method didn't get called with EasyMock

+2

Je crois que cela devrait être la réponse acceptée. Raison pour laquelle les tests unitaires sont souvent modifiés avec de nouvelles exigences et il est très facile de passer à côté de la raison pour laquelle une attente fictive n'a pas été définie. Cette solution rend l'appel de méthode manquant explicite, exigeant ainsi plus d'attention de la part de la personne qui change le code. – mindreader

Questions connexes