hamcrest-library Matchers和hamcrest-Core CoreMatchers之间的区别


71

看起来hamcrestorg.hamcrest.Matchers类非常相似org.hamcrest.CoreMatchers(尽管看起来Matchers更多)。我为什么要选择使用CoreMatchers(除了看起来该类稍小以外),为什么这两个类如此相似?

Answers:


53

Hamcrest匹配器分为几个模块。“核心”包括构建其他匹配器所需的最基本的匹配器和抽象类。org.hamcrest.CoreMatchers仅包括这些匹配器的工厂方法。其他匹配器在“库”模块中,按它们匹配的对象类型分组,并且是可选的。org.hamcrest.Matchers包括两组匹配器。

您应该使用哪个?我从后者静态导入所有内容,没有任何麻烦。也许编译时间可能会花费更长的时间,但这对我来说从来就不是问题。除了JUnit导入,我将其放在单元测试的顶部:

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

这在测试方法中提供了最佳的可读性。


11

如果您经常使用Mockito(就像我一样),那么您可能正在做:

import org.mockito.Mockito;

要么

static import org.mockito.Mockito.*;

并且由于Mockito该类扩展了Mockito的Matchers类,因此您可能最终在Matchers类或其静态方法之间发生冲突。拥有CoreMatchers可使我在与Mockito相同的类中使用JUnit派生的CoreMatchers,而不必在使用时对它们进行完全限定。


1

如果您使用Android的JUnit测试(非连接测试),则CoreMatchers似乎已包含在junit模块中,而Matchers没有。

因此,为了节省开销并避免导入另一个库,请考虑使用CoreMatcher这些类的版本(如果满足):

assertThat(chrome.twiddle(), is(equalTo(0)));

仅可使用CoreMatchers

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.