首页 > 解决方案 > 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(定义)。

我迷路了...

标签: spring-datamockitospring-data-mongodb

解决方案


哇!找到了一个解决方案,可能其他人会觉得这很有用。

罪魁祸首是关于我使用的匹配器方法:any()我上面使用的是 from org.hamcrest.Matchers,而不是org.mockito.Matchers. 我相信我的 IDE 没有选择正确的,因为后者现在已被弃用,取而代之的是org.mockito.ArgumentMatchers.


推荐阅读