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 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