EasyMock - les allumettes sont mélangés avec les valeurs brutes?
J'ai cette signature de la méthode que je veux pour se moquer avec EasyMock
public BigDecimal getRemainingPremium(BigDecimal baseAmount, Date commencementDate, Date effectiveDate, boolean isComplete)
Mon code de test a
Premium premium = createMock(Premium.class);
//add this line
EasyMock.expect(premium.getCommencementDate()).andReturn(EasyMock.anyObject(Date.class)).anyTimes();
expect(
premium.getRemainingPremium(
EasyMock.anyObject(BigDecimal.class),
EasyMock.anyObject(Date.class),
EasyMock.anyObject(Date.class),
EasyMock.anyBoolean()
))
.andReturn(BigDecimal.TEN).anyTimes();
mais je reçois ce matcher exception. J'ai essayé toutes les combinaisons de primitives et " EasyMock.anyObject(Boolean.class)'. Toutes les suggestions sur une solution de contournement?
java.lang.IllegalStateException: 4 matchers expected, 5 recorded.
This exception usually occurs when matchers are mixed with raw values when recording a method:
foo(5, eq(6)); //wrong
You need to use no matcher at all or a matcher for every single param:
foo(eq(5), eq(6)); //right
foo(5, 6); //also right
at org.easymock.internal.ExpectedInvocation.createMissingMatchers(ExpectedInvocation.java:48)
at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:41)
at org.easymock.internal.RecordState.invoke(RecordState.java:79)
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:41)
Je voudrais ajouter à l'ensemble de votre test. Habituellement, lorsque vous le
Désolé, j'ai mis à jour le code de test avec la ligne supplémentaire (je pensais que ça n'a pas l'effet de la tester). C'est ce qui explique où le 5e matcher apparaît, mais je ne suis pas sûr comment appeler replay() sera en effet présent?
foo(5, eq(6)); // wrong
erreur, c'est parce que vous n'avez pas utilisé assez de rapprochement, mais ici, le nombre de rapprochement utilisée est supérieure à celle attendue, donc je soupçonne que vous êtes en utilisant un comparateur de après avoir appelé la relecture.Désolé, j'ai mis à jour le code de test avec la ligne supplémentaire (je pensais que ça n'a pas l'effet de la tester). C'est ce qui explique où le 5e matcher apparaît, mais je ne suis pas sûr comment appeler replay() sera en effet présent?
OriginalL'auteur emeraldjava | 2014-03-19
Vous devez vous connecter pour publier un commentaire.
Vous utilisez un comparateur de où vous devez utiliser un objet réel.
Dans la ligne ci-dessus, vous avez utilisé le
anyObject()
matcher où vous avez vraiment utiliser unDate
objet.Je me demande si vous êtes confus de rapprochement avec des objets fantaisie dans ce sens. Le
anyObject()
matcher est une manière de confirmer que la méthode que vous avez raillé est appelée avec un objet de typeDate
. Il n'est pas de créer un objet date, qui peut être utilisé comme une instance de laDate
classe. Pour cela, vous devez créer un simulacre d'instance deDate
. Alors, gardez à l'esprit que les allumettes doivent être utilisés en tant que paramètres de méthodes fantaisie, mais pas tant que valeurs de retour.Ci-dessous des attentes à résoudre votre problème:
OriginalL'auteur Dan Temple