Java 如何模拟ProceedingJoinPoint
我正在尝试编写一个测试AspectJ advice类的Spock规范。因此,我需要org.aspectj.lang.ProceedingJoinPoint类的模拟实例 由于某些原因,我无法在模拟实例的getArgs上定义返回值。我收到了这个错误消息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:
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'
}