Mockito当/然后不工作

时间:2016-06-22 16:03:22

标签: spring unit-testing testing junit mockito

我正试图在ValidatorService的单元测试中模拟SubscriptionInterceptor

validator = Mockito.mock(ValidatorService.class);
Mockito.when(validator.validateSubscription(any(), any(), any())).thenReturn("");
interceptor = new SubscriptionInterceptor(validator);

稍后,当拦截器调用模拟验证器的validateSubscription方法时,将调用实际类的实例,而不是mock。为什么?如何让方法调用返回空字符串?

1 个答案:

答案 0 :(得分:1)

已在评论中解决:

  

方法被宣布为最终。

Mockito通过提供相关类的代理(子类)来工作,每个方法都被覆盖。但是,对于final类和方法,Java假定它可以检测需要调用哪个实现,并跳过动态方法查找。因此,Mockito无法覆盖final方法,static方法或final类上的方法的行为,并且因为您没有与模拟Mockito进行交互甚至无法警告您

这是一个非常普遍的问题;如果Mockito不能用于存根/验证您的方法,请务必检查final字段。