Est-ce possible? J'ai essayé avec EasyMock.expectLastCall().times(0);
mais EasyMock se plaint que les temps doivent être> = 1Test que la méthode void n'a pas été appelée avec EasyMock
Répondre
j'ai réussi à trouver une solution:
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
Assert.assertFail();
return null;
}
});
Cela ressemble à un bug pour moi. La classe interne Range
ne permet pas de définir un maximum inférieur à 1.
Vous ne pouvez pas vous moquer de cette méthode et appeler simplement Assert.fail()
?
oui, je l'ai fait de cette façon finalement, voir ma réponse – nkr1pt
Si vous vous attendez à votre méthode de ne pas être appelé alors juste n'enregistrer pas. Mais je suis d'accord que ça ne marchera pas avec un joli simulacre.
avec easymock 3.0, vous devez ajouter un .anyTimes() sur le expectLastCall ou le test échouera:
Expectation failure on verify: myMethod(): expected: 1, actual: 0`
exemple basé sur nkr1pt:
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
Assert.assertFail();
return null;
}
}).anyTimes();
Le fait qu'une méthode n'est pas appelé est contrôlé par Mock
ou StrictMock
. Ils lèveront une exception, quand cette méthode non enregistrée est appelée. Ce problème se produit uniquement lorsque vous utilisez NiceMock
s, où les valeurs par défaut sont renvoyées lors de l'appel de méthodes non enregistrées.
Ainsi, une solution peut être pour ne pas utiliser NiceMock
s.
Je suis fortement en désaccord avec la conclusion. Peut-être, dans ce cas, une belle maquette n'est pas le meilleur choix. Mais si vous voulez vous assurer qu'une méthode ne sera pas appelée, en fait c'est la seule chose que vous voulez tester, il est préférable de souligner ceci avec une méthode simulée qui échoue avec un message approprié. – qben
C'est un bon argument. Je voulais pointer celui-ci, puisque je suis tombé sur pourquoi je ne peux pas spécifier 'times (0)'. Et seulement plus tard, je me suis rendu compte que ce genre de contradiction avec l'idée d'une belle moquerie, et pas une belle moquerie ne permet pas d'exécuter des méthodes non enregistrées. Jeter une exception d'affirmation comme la réponse semblait plus comme une solution de contournement pour moi et que les appels de méthode 0 devraient être spécifiés en utilisant pas de beaux simulacres. Peut-être que je suis un peu affirmatif dans la conclusion. Je vais juste le corriger. – Vic
Vous pouvez utiliser .andThrow(new AssertionFailedError()).anyTimes();
- c'est la même exception que Assert.fail()
lancers francs, mais est moins bavard que de faire un Answer
.
Peut-être que l'ajout d'une bonne description des raisons pour lesquelles le test a échoué améliore encore cette solution (qui est la meilleure de toutes les IMO ici). – qben
Voir http://stackoverflow.com/questions/859031/easymock-void-methods, pas sûr que ce soit une dupe cependant. – philant
Ce n'est pas un doublon. – hiergiltdiestfu