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