spring-data - SpringData findAll(Pageable)上的Mockito不匹配方法签名
问题描述
这令人费解,奇怪的是我的搜索没有得到任何答案。我有一个非常简单的 SpringData Mongo 存储库,我正在尝试使用这样的存储库测试控制器。控制器调用findAll(Pageable)
存储库上的 ,所以我希望使用 Mockito 模拟这样的调用:
Page<Idea> page = new PageImpl<Idea>(
IntStream.range(1, 10)
.mapToObj(i -> Idea.builder().title("idea-" + i).build())
.collect(Collectors.toList()));
when(repo.findAll(any(Pageable.class))).thenReturn(page);
但这会导致一个令人费解的编译错误:
MongoRepository 类型中的方法 findAll(Sort) 不适用于参数 (Matcher<Pageable>)
显然 Mockito 选择了错误的方法,但为什么呢?Pageable
是一个接口,它不扩展Sort
!我还尝试findAll(Pageable)
在存储库上定义一个抽象方法,但它随后报告类不匹配:(Matcher<Pageable>
调用)不匹配Pageable
(定义)。
我迷路了...
解决方案
哇!找到了一个解决方案,可能其他人会觉得这很有用。
罪魁祸首是关于我使用的匹配器方法:any()
我上面使用的是 from org.hamcrest.Matchers
,而不是org.mockito.Matchers
. 我相信我的 IDE 没有选择正确的,因为后者现在已被弃用,取而代之的是org.mockito.ArgumentMatchers
.
推荐阅读
- angular - 运行应用程序之前的 Angular Universal 错误
- .net - 如何使用 Nancy.testing 测试这个模块
- django - 如何正确编写需要处理复杂对象的api(检索、创建、更新方法)
- node.js - NodeJS Express 和 ReactJS 的 CORS 错误
- django - 函数“prefetch_related”的“*lookups”参数的品种
- javascript - Bootstrap modal 通过 js bug 关闭
- angular - Angular 递归 HTTP 请求,组合响应,最终返回单个 observable
- python - 当保存为字符串时,CSV 阅读器将数字转换为小数
- delphi - SetWindowPlacement 有时会因最大化窗口而失败
- tensorflow - 无法在 tensorflow r1.14 中导入“tensorflow.contrib.tensorrt”