看起来 hamcrestorg.hamcrest.Matchers
类非常相似org.hamcrest.CoreMatchers
(尽管看起来Matchers
有更多)。我为什么会选择使用CoreMatchers
(除了看起来类略小),为什么这两个类如此相似?
3 回答
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
类,因此您最终可能会在 Matchers 类或其静态方法之间发生冲突。拥有 CoreMatchers 允许我在与 Mockito 相同的类中使用 JUnit 派生的 CoreMatchers,而无需在使用时对它们进行完全限定。
如果您使用 Android 的 JUnit 测试(未连接测试),则CoreMatcher
s 似乎在已包含的junit模块中可用,而 s 则不可用Matchers
。
因此,为了节省开销并避免导入另一个库,请考虑使用CoreMatcher
这些类的版本(如果它们足够):
assertThat(chrome.twiddle(), is(equalTo(0)));
仅使用CoreMatcher
s是可能的。