我们的maven repo目前有两个版本的mockito,两个版本都作为依赖项被引入其他jar,并且每个版本都用于不同的子项目。我们的集成测试是一个单独的项目,使用的是与我们的核心应用程序使用的单元测试不同的版本。
mockito版本更改了方法的签名,使其无法向后计算。由于每个mockito版本所依赖的罐子,我不容易将maven重新配置为每个项目只使用一个版本的mockito。
当我直接从eclipse或命令行运行maven时,这不是问题,正确的mockito版本用于基于pom文件的每个项目。但是,当我尝试在eclipse中运行我的单元测试时,我得到一个NoSuchMethodError,这似乎是由于使用不正确的mockito版本的eclipse。有没有办法确保我的junit测试使用我想要的mockito版本,也就是pom文件中指定的版本?
答案 0 :(得分:1)
你应该做的第一件事是将mockito声明为使用它的模块的直接依赖,而不是依赖于通过传递依赖来吸引它。 Maven / Eclipse / m2e应该first use the version that is declared locally。
如果无法解决问题,根据我的经验,它可以帮助重新排序POM中的依赖项并检查项目资源管理器中的 Maven依赖项容器或依赖项层次结构然后在POM编辑器中选择em> tab,看看现在是否使用了正确的版本。通常尝试将有问题的依赖项移动到依赖项列表中的第一个位置或最后一个位置可以解决问题。
另一个(可能是额外的)选项是向该依赖项添加一个排除,它引用了mockito的“错误”版本。再次,检查依赖关系层次结构选项卡以查看依赖关系的来源。
最后,您应该避免头痛,并设置一个项目范围dependency management,涵盖应用程序中的单元测试以及集成测试。
祝你好运;)答案 1 :(得分:-1)
在Eclipse中,转到运行配置以进行单元测试。有一个" Classpath"选项卡。您应该能够在那里修改类路径以使用正确版本的jar。