为了账号安全,请及时绑定邮箱和手机立即绑定

JUnit AsserEquals() 由于数组上有多余的空格而失败

JUnit AsserEquals() 由于数组上有多余的空格而失败

FFIVE 2021-06-01 09:08:15
将 2 个数组与其中的 kafka 生产者记录进行比较时,我的 Junit 测试失败。失败是阵列后的一个额外空间。预期的:java.util.ArrayList<[ProducerRecord(topic=producer-test, partition=null, headers=RecordHeaders(headers = [], isReadOnly = false), key=0, value=Message: test-message,Number: 0, timestamp=null), ProducerRecord(topic=producer-test, partition=null, headers=RecordHeaders(headers = [], isReadOnly = false), key=1, value=Message: test-message,Number: 1, timestamp=null)]> 实际的:java.util.ArrayList<[ProducerRecord(topic=producer-test, partition=null, headers=RecordHeaders(headers = [], isReadOnly = false), key=0, value=Message: test-message,Number: 0, timestamp=null), ProducerRecord(topic=producer-test, partition=null, headers=RecordHeaders(headers = [], isReadOnly = false), key=1, value=Message: test-message,Number: 1, timestamp=null)]>IDE 告诉我唯一的区别是在 Expected 中的 arrayList 末尾后面有一个空格,您可以通过突出显示末尾来查看。到底是怎么回事?!编辑:这是其他一些代码List<ProducerRecord<Integer, TestObj>> history = producer.history();    //To be inserted into expected    TestObj obj0 = new TestObj("test-message", 0);    TestObj obj1 = new TestObj("test-message", 1);    //new arraylist is needed or else the lists have slightly different types for some reason    List<ProducerRecord<Integer, TestObj>> expected = new ArrayList<ProducerRecord<Integer, TestObj>>(Arrays.asList(            new ProducerRecord<Integer, TestObj>("producer-test", 0, obj0),            new ProducerRecord<Integer, TestObj>("producer-test", 1, obj1)    ));    Assert.assertEquals("Sent didn't match expected!", expected, history);
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

Assert.assertEquals() 正在调用 expected.equals(history)

的定义List.equals(Object o)如下:

比较指定的对象与此列表是否相等。当且仅当指定的对象也是一个列表,两个列表的大小相同,并且两个列表中所有对应的元素对都相等时,才返回 true。(如果 (e1==null ? e2==null : e1.equals(e2)),两个元素 e1 和 e2 相等。)换句话说,如果两个列表以相同的顺序包含相同的元素,则它们被定义为相等. 此定义可确保 equals 方法在 List 接口的不同实现中正常工作。

您是否equals为 ProducerRecord 类定义了方法?

如果你没有,那么你的ProducerRecord对象将通过引用相等进行比较,这意味着它们只会在它们实际上是相同的对象的基础上进行比较。由于您ProducerRecord在测试中构建新对象,因此它们将不具有引用相等性。


查看完整回答
反对 回复 2021-06-02
  • 2 回答
  • 0 关注
  • 221 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信