我正在尝试在 SubscriptionInterceptor
的单元测试中模拟 ValidatorService
。
validator = Mockito.mock(ValidatorService.class);
Mockito.when(validator.validateSubscription(any(), any(), any())).thenReturn("");
interceptor = new SubscriptionInterceptor(validator);
稍后,当拦截器调用模拟验证器的 validateSubscription
方法时,将调用实际类的实例,而不是模拟。为什么?如何让方法调用返回一个空字符串?
最佳答案
在评论中解决:
Method was declared final.
Mockito 通过提供相关类的代理(子类)来工作,每个方法都被覆盖。但是,对于 final
类和方法,Java 假定它可以检测到它需要调用哪个实现,并跳过动态方法查找。因此,Mockito 无法覆盖 final
方法、static
方法或 final
类上的方法的行为,并且因为您没有与模拟 Mockito 甚至无法警告您。
这是一个很常见的问题;如果 Mockito 无法 stub /验证您的方法,请务必检查 final
字段。
关于spring - Mockito 什么时候/然后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973148/