Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy中的Mockito匹配器_Groovy_Mockito_Aop_Spy - Fatal编程技术网

Groovy中的Mockito匹配器

Groovy中的Mockito匹配器,groovy,mockito,aop,spy,Groovy,Mockito,Aop,Spy,我正在尝试将我的一个项目转换为groovy,并希望继续使用JUnit4和Mockito。我有一个测试,它验证了当我调用另一个方法时是否调用了SpringAOP-around通知 这是我的密码: @Test void testPointCut() { //Given def target = new MainController(); def factory = new AspectJProxyFactory(target); def aspect = moc

我正在尝试将我的一个项目转换为groovy,并希望继续使用JUnit4和Mockito。我有一个测试,它验证了当我调用另一个方法时是否调用了SpringAOP-around通知

这是我的密码:

 @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));
  }
当我运行此操作时,会出现一个异常:

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)

testPointCut(com.meetupinthemiddle.loggingspecttest)所用时间:0.277秒我相信Mockito在模拟具体的groovy类时有困难。当我模拟一个简单的具体类时,我会得到同样类型的错误,但是当我添加一个接口并模拟接口时,它就会工作

我认为(正如在您链接的问题的答案中所述),groovy正在拦截该调用,并将其替换为对getMetaClass()的调用


可能的证据是,当您的方法上明显有匹配项时,错误会显示“预期0个匹配项”。

我相信Mockito在模拟具体的groovy类时会遇到问题。当我模拟一个简单的具体类时,我会得到同样类型的错误,但是当我添加一个接口并模拟接口时,它就会工作

我认为(正如在您链接的问题的答案中所述),groovy正在拦截该调用,并将其替换为对getMetaClass()的调用

可能的证据是,当您的方法上明显有匹配项时,错误显示“预期0个匹配项”