Hamcrest-library Matcher 与 hamcrest-core CoreMatcher 的区别

它看起来像吊床 org.hamcrest.Matchers类非常类似于 org.hamcrest.CoreMatchers(虽然它看起来像 Matchers有更多)。为什么我会选择使用 CoreMatchers(除了它看起来稍微小一些) ,为什么这两个类如此相似?

15341 次浏览

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

你应该用哪个?我从后者静态导入一切没有任何麻烦。也许编译时间会稍微长一点,但这对我来说从来都不是问题。除了 JUnit 导入之外,我还将其放在单元测试的顶部:

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

这使得测试方法具有最佳的可读性。

如果你经常使用 Mockito (就像我一样) ,你可能会这样做:

import org.mockito.Mockito;

或者

static import org.mockito.Mockito.*;

而且由于 Mockito类扩展了 Mockito 的 Matchers类,因此您可能会遇到 Matcher 类或它们的静态方法之间的冲突。使用 CoreMatcher 可以让我在与 Mockito 相同的类中使用源自 JUnit 的 CoreMatcher,而无需在使用时对它们进行完全限定。

如果您使用 Android 的 JUnit 测试(非连接测试) ,那么 CoreMatcher似乎可以在已经包含的 Junit模块中使用,而 Matchers则不能。

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

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

只使用 CoreMatchers是可能的。