【问题标题】:Difference between hamcrest-library Matchers and hamcrest-core CoreMatchershamcrest-library Matchers 和 hamcrest-core CoreMatchers 之间的区别
【发布时间】:2012-06-07 13:35:41
【问题描述】:

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

【问题讨论】:

    标签: junit hamcrest


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      import org.mockito.Mockito;
      

      static import org.mockito.Mockito.*;
      

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

      【讨论】:

        【解决方案3】:

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

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

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

        只能使用CoreMatchers

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-13
          • 2012-01-09
          • 1970-01-01
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 2010-11-08
          • 1970-01-01
          相关资源
          最近更新 更多