摩擦图何时/然后不工作



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

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

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

在注释中解决:

方法被声明最终。

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

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

,为了不删除 finalstatic fields/classs/class/class/methods在主java源中,您可以在operto的"何时/then"之后放置模拟初始化。存根。在所有存根初始化之后,它将调用带有final S的模拟对象的构造函数。

尝试:

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

相关内容

  • 没有找到相关文章

最新更新