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

将 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);


FFIVE
浏览 223回答 2
2回答

不负相思意

Assert.assertEquals()&nbsp;正在调用&nbsp;expected.equals(history)的定义List.equals(Object o)如下:比较指定的对象与此列表是否相等。当且仅当指定的对象也是一个列表,两个列表的大小相同,并且两个列表中所有对应的元素对都相等时,才返回 true。(如果 (e1==null ? e2==null : e1.equals(e2)),两个元素 e1 和 e2 相等。)换句话说,如果两个列表以相同的顺序包含相同的元素,则它们被定义为相等.&nbsp;此定义可确保 equals 方法在 List 接口的不同实现中正常工作。您是否equals为 ProducerRecord 类定义了方法?如果你没有,那么你的ProducerRecord对象将通过引用相等进行比较,这意味着它们只会在它们实际上是相同的对象的基础上进行比较。由于您ProducerRecord在测试中构建新对象,因此它们将不具有引用相等性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java