Mockito,JUnit,Hamcrest,Versioning

默认情况下,Hamcrest所需的版本为:

  • JUnit 4.11
    • Hamcrest 1.3
  • Mockito核心1.9.5
    • Hamcrest 1.1

Hamcrest 1.1和1.3之间没有重要的API变化。 目前我的测试用例试图用Hamcrest 1.1运行JUnit 4.11,但我有理由相信这是一个坏主意。 出于类似的原因,我怀疑尝试将Mockito-core 1.9.5与Hamcrest 1.3一起使用也是一个坏主意。

该怎么办?

  1. 将Hamcrest 1.1与最新的JUnit和Mockito一起使用
  2. 将Hamcrest 1.3与最新的JUnit和Mockito一起使用
  3. 尝试修补Mockito-core 1.9.5以使用Hamcrest 1.3
    • 我此刻没有的时间
  4. 使用JUnit 4.10
  5. 其他?

更新2015-06-12: Mockito 1.10.19和2.0.13-beta仍然使用Hamcrest 1.1

由@ durron597于2015年7月29日更新:这个出色的答案在2013年是正确的,但是由于Mockito的更新已经过时了。 看到这个答案。

我在许多Maven项目中使用最新的JUnit和Mockito核心依赖项以及hamcrest 1.3。 直到现在没有人报告这有任何问题。 因此,如果这适用于您的测试,请使用最新版本的所有三个版本。 只需确保使用mockito核心而不是全部。

所以我建议选择2来获得新版本的所有好处。 如果您真的怀疑任何事情都可能出错,请使用最安全的选项4。 但是当然你可以使用选项2,并且在不久的将来,任何事情都会出错,你可以切换到选项2.或者从那时起,一个较新的模拟已经在那里解决了这个问题。

来自mockito的注释问题397 :mockito-core没有出现此问题。

更新:截至2015年6月30日,Mockito的最新版本在内部使用Hamcrest 1.3。

  • Github提交
  • Maven中央链接

因此,对于能够升级到Mockito 2.0的人来说,这个问题已经过时了。

我不会改变接受的答案,因为mszalbach应该保留15个代表,但这应该是新的规范答案

这是mszalbach建议的Maven解决方案:

   org.hamcrest hamcrest-all 1.3   junit junit 4.11   hamcrest-core org.hamcrest     org.mockito mockito-core 1.9.5   org.hamcrest hamcrest-core        org.hamcrest hamcrest-all test   junit junit test   org.mockito mockito-core test   

看看这里的Mockito文档,我认为选项2是推荐的方式(使用mockito-core工件)。