【发布时间】:2015-01-28 03:21:19
【问题描述】:
我正在尝试编写一个单元测试来测试两个列表的排序。我所拥有的是调用自定义排序比较器,然后将原始列表与排序列表进行比较。然后我使用 assertEquals 来测试排序列表和原始列表是否匹配。
假设我有一个简单的模型...患者。
患者有两个字段...姓名和年龄。
List<Patient> unOrdered = new ArrayList<Patient>();
List<Patient> ordered = new ArrayList<Patient>();
我用同样的三个病人填满这两个,然后正确地订购了一个。
ordered.add(new Patient("Chris Bacon", "45"));
ordered.add(new Patient("Charles Steak", "82"));
ordered.add(new Patient("Matt Pork", "32"));
然后我填写订购的一个并按年龄升序排列。
unOrdered.add(new Patient("Matt Pork", "32"));
unOrdered.add(new Patient("Chris Bacon", "45"));
unOrdered.add(new Patient("Charles Steak", "82"));
然后,在我的单元测试中,我编写了一个带有自定义比较器的 Collections.sort,以按年龄升序对 unOrdered 列表进行排序。我在测试期间(对我而言)将该列表打印到控制台,然后执行...
assertEquals(ordered, unOrdered);
控制台以相同的顺序打印这些列表,但 assertEquals 返回 false。我什至尝试以相同的顺序创建两个完全相同的列表并尝试 assertEquals ,它仍然返回 false。
我不是 Java 专家,但根据我在网上阅读的内容和文档 assertEquals 不仅检查列表中对象的相等性,还检查对象的顺序。那么......为什么它总是返回假?是 assertEquals 无法处理更复杂的对象还是我做错了什么?
【问题讨论】:
-
Patient有equals方法吗?如果不是,它将使用默认的基于身份的相等性,并且您将不同的实例放在两个列表中。 -
@PatriciaShanahan 我确实有一个 equals 方法,但我没想过在那里检查。当然,问题就在那里。谢谢。
标签: java unit-testing junit