74

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

4

3 回答 3

56

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

你应该使用哪个?我从后者静态导入所有内容,没有任何麻烦。也许编译时间可能需要稍长一些,但这对我来说从来都不是问题。除了 JUnit 导入之外,我还把它放在了单元测试的顶部:

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

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

于 2012-06-08T20:45:58.693 回答
11

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

import org.mockito.Mockito;

或者

static import org.mockito.Mockito.*;

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

于 2013-03-19T22:23:45.863 回答
1

如果您使用 Android 的 JUnit 测试(未连接测试),则CoreMatchers 似乎在已包含的junit模块中可用,而 s 则不可用Matchers

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

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

仅使用CoreMatchers是可能的。

于 2018-06-24T13:18:21.867 回答