Ich experimentiere mit der Umwandlung eines meiner Projekte in Groovy und möchte weiter mit JUnit4 mit Mockito. Ich habe einen Test, der bestätigt, dass ein Spring AOP um Ratschläge aufgerufen wird, wenn ich eine andere Methode anrufe.Mockito Matchers in Groovy
Hier ist mein Code:
@Test
void testPointCut() {
//Given
def target = new MainController();
def factory = new AspectJProxyFactory(target);
def aspect = mock(LoggingAspect.class);
factory.addAspect(aspect);
def proxy = factory.getProxy();
when(aspect.log(any(ProceedingJoinPoint))).thenReturn(null);
//When
proxy.index();
//Then
verify(aspect).log(any(ProceedingJoinPoint));
}
Als ich das laufen, ich eine Ausnahme erhalten:
testPointCut(com.meetupinthemiddle.LoggingAspectTest) Time elapsed: 0.277 sec <<< ERROR!
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPogoSite(CallSiteArray.java:147)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:164)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at com.meetupinthemiddle.LoggingAspectTest.testPointCut(LoggingAspectTest.groovy:20)
Aber der entsprechende Code in Java arbeitet ohne problem- Irgendwelche Ideen? Ich denke, das Problem könnte das gleiche wie das? Bug in Mockito with Grails/Groovy, aber es hat keine Antwort!