So habe ich schon seit einer Weile die Klassenerweiterung von EasyMock verwendet. Ganz plötzlich erhalte ich diese Ausnahme, aber nur, wenn ich die gesamte Testsuite laufen:Während der Suite Tests EasyMock sagt 0 Matcher erwartet 1 aufgezeichnet
java.lang.IllegalStateException: 0 matchers expected, 1 recorded.
at org.easymock.internal.ExpectedInvocation.createMissingMatchers(ExpectedInvocation.java:42)
at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:34)
at org.easymock.internal.ExpectedInvocation.<init>(ExpectedInvocation.java:26)
at org.easymock.internal.RecordState.invoke(RecordState.java:64)
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:24)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:56)
at org.easymock.classextension.internal.ClassProxyFactory$1.intercept(ClassProxyFactory.java:74)
at com.protrade.soccersim.data.emulator.matrix.PositionCategoryMatrix$$EnhancerByCGLIB$$c5298a7.getPossession(<generated>)
at com.protrade.soccersim.data.emulator.stats.team.PossessionCalculatorUnitTest.testDeterminePossessionHomeWin(PossessionCalculatorUnitTest.java:45)
Die beteiligten Code ist diese kleine Schönheit (getrimmt ein bisschen):
@Before
public void setUp() throws Exception {
homeTeam = createMock(PositionCategoryMatrix.class);
awayTeam = createMock(PositionCategoryMatrix.class);
...
}
@Test
public void testDeterminePossessionHomeWin() {
expect(homeTeam.getPossession()).andReturn(0.15151515);
expect(awayTeam.getPossession()).andReturn(0.01515152);
replay(homeTeam, awayTeam);
...
}
Die Ausnahme wird auf den ersten erwartet. Und es macht wirklich keinen Sinn. Es sagt, es wird ein Matcher, aber die Methode braucht nicht einmal ein Argument. Und seltsam genug ist es nur während Testsuiten! Ich erstelle einen neuen Mock im @Before, also sollte er nichts von woanders erben (nicht dass eine andere Methode einen Matcher hätte)
Also, irgendwelche Ideen?
Ich bekomme das auch (der Hauptunterschied zwischen diesem und jedem anderen ähnlichen Google-Ergebnis auf die Fehlermeldung ist, dass die aufgezeichnete Nummer größer ist als die erwartete Zahl ... das bedeutet, es ist kein "Missing Matcher" verursacht durch einen konstanten/matcher mix.) Hier geht es um den trivialsten Einsatz von EasyMock möglich - wie habe ich das vorher noch nie erlebt? (Ich habe es in 2.5.2 und 3.0 mit ähnlichen Ergebnissen versucht.) – Jared