将2个对象与JUnit 4.12中的地图进行比较的测试失败

时间:2016-01-11 09:20:18

标签: java unit-testing junit

我已经将我的JUnit版本从4.10更新到4.12,在这之后,一些测试已经破坏。

这些测试将2个对象与里面的地图进行比较,2个对象是相同的,但是当它们断言时我得到以下错误:

assertThat(event, equalTo(expectedEvent));

错误如下:

Expected: <Event(prop1=value1, prop2=value2...propertyN={key=value})>
 but: was <Event(prop1=value1, prop2=value2...propertyN={ "key" : "value"})>

正如您所看到的那样,问题是JUnit解释地图的方式,期望 key = value ,但它是&#34; key&#34; :&#34;价值&#34;

在JUnit&lt; 4.12,预期值和实际值之间的差异仍然存在,但是它更加仁慈并且测试通过了,但是在JUnit 4.12中没有。

我该如何解决这个问题?如何使JUnit在预期对象和实际对象中以相同的方式解析地图?

编辑:问题已经确定了JUnit对地图的期望,因为无论如何解析属性,它都会以 {key = value} 样式预期。

谢谢 问候

1 个答案:

答案 0 :(得分:0)

我终于确定了这个问题。问题是Event对象被2个不同的HashMap实现填充,并且它们的toString()实现不同,一个生成 {key = value} 而另一个生成 {“key “:”value“} ,因此会产生差异。

我没有弄乱Event类中的equals方法,而是在assertingThat之前将两个事件解析为JSON。这样,两个HashMaps都以相同的方式解析: - )

谢谢你们!