Junit在具有双字段的对象上断言

时间:2014-04-19 02:01:56

标签: junit double-precision

我有两个物品清单。这些对象引用其他对象,而这些对象又包含双精度对象。我想使用assertEquals来测试两个对象是否相同。我已经用手验证过它们,但是assertEquals仍然是假的。我认为原因是因为精度问题,双打不一样。我知道我可以通过向下钻取到双字段并使用assertEquals(d1,d2,delta)来解决这个问题,但这看起来很麻烦。无论如何都要为assertEquals(或其他方法)提供delta,这样它可以在遇到双精度数据时使用该delta来进行比较吗?

1 个答案:

答案 0 :(得分:0)

Hamcrest matchers可能会让这更容易一些。您可以创建自定义Matcher(或FeatureMatcher - Is there a simple way to match a field using Hamcrest?),然后使用closeTo进行组合以测试双打,然后使用容器匹配器({{3 }})检查列表。

例如,要检查只包含一个Thing的列表,其中getValue方法返回大约10

Matcher<Thing> thingWithExpectedDouble =
    Matchers.<Thing>hasProperty("value", Matchers.closeTo(10, 0.0001));
assertThat(listOfItems, Matchers.contains(thingWithExpectedDouble));