Hamcrest库Matcher和Hamcrest核心CoreMatchers之间的区别

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

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

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

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

这给testing方法提供了最好的可读性。

如果你使用Mockito(和我一样),你可能会这样做:

 import org.mockito.Mockito; 

要么

 static import org.mockito.Mockito.*; 

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