【问题标题】:Hamcrest number comparison using between使用 between 比较 Hamcrest 数
【发布时间】:2012-10-08 14:02:56
【问题描述】:

Hamcrest 有没有办法比较一个数字范围内的数字?我正在寻找这样的东西:

assertThat(50L, is(between(12L, 1658L)));

【问题讨论】:

    标签: java hamcrest


    【解决方案1】:

    Jeff 的解决方案的替代方法是使用both

    assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
    

    我认为这很有可读性。如果检查失败,您还会收到一条很好的错误消息:

    预期:是(大于 且小于 的值) 得到:

    【讨论】:

    • 我没有找到 both 语句的导入。有人可以帮忙吗?
    • @CiganoMorrisonMendez 它在 org.hamcrest.CoreMatchers 中
    • 谢谢。它对我来说没有出现,因为 LambdaJ 使用 hamcrest-all-1.1,它没有这个实现。我在 1.2 或更高版本找到它。
    • 这也适用于 java.util.Date 比较,因为 Date 实现了 Comparable
    【解决方案2】:

    我不相信 between 是核心 hamcrest 匹配器的一部分,但你可以这样做:

    assertThat(number, allOf(greaterThan(min),lessThan(max)));
    

    这还是有点难看,所以你可以在它们之间创建一个辅助方法

    assertThat(number, between(min,max))
    

    between 看起来像

    allOf(greaterThan(min),lessThan(max))
    

    仍然不是一个很好的解决方案,但它读起来就像一个 hamcrest 匹配器。

    如果您找不到公开可用的,编写自己的between matcher http://code.google.com/p/hamcrest/wiki/Tutorial 将是微不足道的。

    【讨论】:

      【解决方案3】:

      如果您正在处理整数,您应该考虑使用closeTo 方法:

      assertThat((double)nclient, is(closeTo(nserver, 1d)));
      

      不幸的是,整数没有closeTo,但是每个 32 位整数都可以用双精度表示,因此您可以简单地将它们转换为双精度,然后继续。

      这并不完全等同于 between,但有时会有所帮助。

      【讨论】:

        【解决方案4】:

        另一种选择是使用Cirneco extension。它有between()betweenInclusive() 等等。这些匹配器也适用于实现Comparable(如Date)的其他对象。

        按照你的例子,它将是:

        assertThat(50L, between(12L, 1658L));  
        

        如果您希望包含两个边界:

        assertThat(50L, betweenIncluded(12L, 1658L));  
        

        或者如果您只想包含其中一个边界:

        assertThat(50L, betweenLowerBoundIncluded(12L, 1658L));  
        assertThat(50L, betweenUpperBoundIncluded(12L, 1658L));  
        

        您可以将以下依赖项用于符合 JDK7 的项目:

        <dependency>
          <groupId>it.ozimov</groupId>
          <artifactId>java7-hamcrest-matchers</artifactId>
          <version>0.7.0</version>
        </dependency>
        

        如果您使用的是 JDK8,则如下

        <dependency>
          <groupId>it.ozimov</groupId>
          <artifactId>java8-hamcrest-matchers</artifactId>
          <version>0.7.0</version>
        </dependency>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多