Java 莫基托';s Matcher vs Hamcrest Matcher?
这将是一个简单的问题,但是如果我的类路径中包含了两个库,我就找不到它们之间的区别,也找不到要使用哪一个 Hamcrest matcher方法返回Java 莫基托';s Matcher vs Hamcrest Matcher?,java,mockito,hamcrest,Java,Mockito,Hamcrest,这将是一个简单的问题,但是如果我的类路径中包含了两个库,我就找不到它们之间的区别,也找不到要使用哪一个 Hamcrest matcher方法返回matcher,Mockito matchers返回T。因此,例如:org.Hamcrest.matchers.any(Integer.class)返回org.Hamcrest.matcher的实例,而org.Mockito.matchers.any(Integer.class)返回Integer的实例 这意味着您只能在签名中需要Matcher对象时使用
matcher
,Mockito matchers返回T。因此,例如:org.Hamcrest.matchers.any(Integer.class)
返回org.Hamcrest.matcher
的实例,而org.Mockito.matchers.any(Integer.class)
返回Integer
的实例
这意味着您只能在签名中需要Matcher
对象时使用Hamcrest匹配器,通常是在assertThat
调用中。在设置调用模拟对象方法的期望或验证时,使用Mockito匹配器
例如(为了清晰起见,使用完全限定的名称):
如果要在需要Mockito匹配器的上下文中使用Hamcrest匹配器,可以使用org.Mockito.Matchers.argThat
matcher。它将Hamcrest匹配器转换为Mockito匹配器。所以,假设您希望以某种精度(但不太高)匹配一个双精度值。在这种情况下,您可以执行以下操作:
when(mockFoo.getBarByDouble(argThat(is(closeTo(1.0, 0.001))))).
thenReturn(mockBar);
相关:只需注意,在Mockito 2中,与Hamcrest
Matcher
s一起工作的argThat
重载被移动MockitoHamcrest
。在“与1.10不兼容的更改”一节中讨论了这一点。
when(mockFoo.getBarByDouble(argThat(is(closeTo(1.0, 0.001))))).
thenReturn(mockBar);