【问题标题】:How do I compare doubles using JUnit and Hamcrest?如何使用 JUnit 和 Hamcrest 比较双打?
【发布时间】:2015-12-18 16:03:24
【问题描述】:

我正在使用 JUnit 和 Hamcrest 编写单元测试。我一直在使用以下方法比较双精度值:

assertThat(result, is(0.5));

但是,我现在需要比较计算值,我不想与完整的双精度值进行比较。相反,我想比较接近度。

我发现了一个名为 IsCloseTo 的类,但我不确定如何在 assertThat 中使用它,而且我在网上找不到任何示例。

执行以下操作的正确语法是什么?

// I can't do this as I need to know what methods/classes whatever I should be using
// isCloseTo doesn't exist.
assertThat(result, isCloseTo(0.5, 0.1)); 

【问题讨论】:

    标签: java junit hamcrest


    【解决方案1】:

    您应该可以致电Matchers.closeTo(double, double)。使用静态导入,它看起来像:

    assertThat(result, closeTo(0.5, 0.1));
    

    【讨论】:

    • 对于那些正在搜索它的人来说,完整的静态导入是:import static org.hamcrest.Matchers.closeTo;
    【解决方案2】:

    如果你使用,你可以让这个阅读更好

    assertThat(actual, is(closeTo(expected, delta)));
    

    import static org.hamcrest.Matchers.closeTo;
    import static org.hamcrest.Matchers.is;
    

    【讨论】:

    • closeTo 不需要 is 包装器
    • 没错,它不需要。是为了让代码更具可读性。
    【解决方案3】:

    刚刚解决了,is 实际上返回了一个Is 对象,所以我需要做的就是:

    assertThat(result, new IsCloseTo(0.5, 0.1)); 
    

    不过来自 nickb 的答案更好。

    【讨论】:

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