将 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
在测试中构建新对象,因此它们将不具有引用相等性。
添加回答
举报
0/150
提交
取消