Java 如何模拟ProceedingJoinPoint

Java 如何模拟ProceedingJoinPoint,java,unit-testing,aspectj,spock,Java,Unit Testing,Aspectj,Spock,我正在尝试编写一个测试AspectJ advice类的Spock规范。因此,我需要org.aspectj.lang.ProceedingJoinPoint类的模拟实例 由于某些原因,我无法在模拟实例的getArgs上定义返回值。我收到了这个错误消息 java.lang.NullPointerException: Cannot invoke method rightShift() on null object 模拟ProceedingJointPoint接口的正确方法是什么?有人能帮我吗 PS:

我正在尝试编写一个测试AspectJ advice类的Spock规范。因此,我需要org.aspectj.lang.ProceedingJoinPoint类的模拟实例

由于某些原因,我无法在模拟实例的getArgs上定义返回值。我收到了这个错误消息

java.lang.NullPointerException: Cannot invoke method rightShift() on null object
模拟ProceedingJointPoint接口的正确方法是什么?有人能帮我吗

PS:祝你圣诞快乐:

根据Peter更新解决方案


我能发现两个错误:

pointCut.getArgs>>['xxx',1L,44]作为对象[]与pointCut.getArgs>['xxx',1L,44]作为对象[]相同,这不是模拟交互。要解决这个问题,您需要在RHS上使用parens。也许您甚至可以省略强制,因为Groovy将自动执行强制

同一方法调用的存根和模拟需要在同一语句中进行:然后:1*pointCut.getArgs>>['xxx',1L,44]作为对象[]。有关这方面的更多信息,请参阅上的“嘲弄”一章


谢谢你,彼得。成功了。
java.lang.NullPointerException: Cannot invoke method rightShift() on null object
void "Verify client capability mechanism"() {                                                            

    given:                                                                                               
    def pointCut = Mock(ProceedingJoinPoint)                                                             

    when: 'the advice gets called'                                                                       
    def retVal = new ClientCapabilitySecurityAdvice().verifyUserCanPerformActionOnCurrentClient(pointCut)

    then: 'the method calls would have the following arguments'                                          
    1 * pointCut.getArgs() >> ['xxx', 1L, 44]                                                            

    and: 'the actual return value is set'                                                                
    1 * pointCut.proceed() >> 'Hello'                                                                    

    and: 'the call may proceed'                                                                          
    retVal == 'Hello'                                                                                    
}