【发布时间】:2012-06-07 13:35:41
【问题描述】:
看起来 hamcrest org.hamcrest.Matchers 类与 org.hamcrest.CoreMatchers 非常相似(尽管看起来 Matchers 更多)。为什么我会选择使用CoreMatchers(除了看起来类略小一些),为什么这两个类如此相似?
【问题讨论】:
看起来 hamcrest org.hamcrest.Matchers 类与 org.hamcrest.CoreMatchers 非常相似(尽管看起来 Matchers 更多)。为什么我会选择使用CoreMatchers(除了看起来类略小一些),为什么这两个类如此相似?
【问题讨论】:
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 测试(未连接测试),CoreMatchers 似乎在已包含的 junit 模块中可用,而 Matchers 则不可用。
因此,为了节省开销并避免导入另一个库,如果足够,请考虑使用这些类的 CoreMatcher 版本:
assertThat(chrome.twiddle(), is(equalTo(0)));
只能使用CoreMatchers。
【讨论】: