我正试图在ValidatorService
的单元测试中模拟SubscriptionInterceptor
。
validator = Mockito.mock(ValidatorService.class);
Mockito.when(validator.validateSubscription(any(), any(), any())).thenReturn("");
interceptor = new SubscriptionInterceptor(validator);
稍后,当拦截器调用模拟验证器的validateSubscription
方法时,将调用实际类的实例,而不是mock。为什么?如何让方法调用返回空字符串?
答案 0 :(得分:1)
已在评论中解决:
方法被宣布为最终。
Mockito通过提供相关类的代理(子类)来工作,每个方法都被覆盖。但是,对于final
类和方法,Java假定它可以检测需要调用哪个实现,并跳过动态方法查找。因此,Mockito无法覆盖final
方法,static
方法或final
类上的方法的行为,并且因为您没有与模拟Mockito进行交互甚至无法警告您
这是一个非常普遍的问题;如果Mockito不能用于存根/验证您的方法,请务必检查final
字段。