spring - Mockito 什么时候/然后不工作

标签 spring unit-testing testing junit mockito

我正在尝试在 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/

相关文章:

java - Mockito 验证仅在 AVD 运行时通过

java - Spring Boot应用程序无法启动可能是由于依赖关系

java - 单元测试-如何使用Spring MockMVC调用soap服务

python - Pytest:将一个 fixture 传递给另一个

ruby-on-rails - 什么是好的 RSpec 自动化测试平台?

java - Mockito 在 final方法中调用真实代码而不是抛出 MissingMethodInvocationException

java - ResultSetExtractor 中 getInt 的性能问题

java - modelAndView返回后执行任务

unit-testing - 观察者模式的单元测试

angularjs - 使用模拟测试 AngularJS 服务的初始化