使用Spring,Mockito和Maven进行奇怪的编译错误,但是在Eclipse中却没有

时间:2018-10-26 23:11:35

标签: java spring eclipse maven mockito

我从事许多SpringBoot 2项目,所有项目都使用Java 8,这些项目是最近从SpringBoot 1.5转换而来的。它们也从Mockito 1.x转换为2.x。在这些项目之一的单元测试中,我有这样一行:

when(jdbcTemplate.query(anyString(), any(RowMapper.class)))
    .thenReturn(Arrays.asList(new ApiKeyRecord().id("a").apiKeySha1("b")));

这可以在Eclipse中编译并正常运行。

当我使用Maven进行构建时,出现COMPILE错误,如下所示:

1. ERROR in ...Test.java (at line 49)
when(jdbcTemplate.query(anyString(), any(RowMapper.class)))
                  ^^^^^
The method query(String, ResultSetExtractor<T>) in the type JdbcTemplate
is not applicable for the arguments (String, RowMapper)

请注意,query()应该有多个重载版本,一个带有RowMapper,另一个带有ResultSetExtractor,以及其他版本。

我尝试使用mvn -U运行。我尝试删除spring-jdbc中的整个.m2/repo树。没有变化。

请注意,在进行SpringBoot 2转换之前,此单元测试工作正常。

请注意,我的进口商品包括:

import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;

我看到Mockito 2中的一个变化是现在Mockito类扩展了ArgumentMatchers。使用Mockito 1时,该文件用于导入Matchers类。随着Mockito现在扩展ArgumentMatchers,我想我可以删除ArgumentMatchers导入。我也这样做了,但还是失败了。

更新

请注意,此问题中的情况与该问题的重复部分所引用的问题几乎相同。但是,一个奇怪的区别是我在Eclipse中没有看到编译错误。这些问题仅发生在使用Maven的命令行构建中。

0 个答案:

没有答案