我从事许多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的命令行构建中。