【发布时间】:2011-02-24 18:11:31
【问题描述】:
我只是想知道人们如何进行单元测试并断言“预期”集合与“实际”集合相同/相似(顺序并不重要)。
为了执行这个断言,我编写了简单的断言 API:-
public void assertCollection(Collection<?> expectedCollection, Collection<?> actualCollection) {
assertNotNull(expectedCollection);
assertNotNull(actualCollection);
assertEquals(expectedCollection.size(), actualCollection.size());
assertTrue(expectedCollection.containsAll(actualCollection));
assertTrue(actualCollection.containsAll(expectedCollection));
}
嗯,它有效。如果我只断言一堆整数或字符串,这很简单。例如,如果我试图断言 Hibernate 域的集合,这也可能会非常痛苦。 collection.containsAll(..) 依赖 equals(..) 来执行检查,但我总是覆盖我的 Hibernate 域中的 equals(..) 以仅检查业务密钥(这是在Hibernate 网站),而不是该域的所有字段。当然,只检查业务键是有意义的,但有时我真的想确保所有字段都正确,而不仅仅是业务键(例如,新的数据输入记录)。所以,在这种情况下,我不能乱用 domain.equals(..) 并且似乎我需要实现一些比较器只是为了进行单元测试,而不是依赖于 collection.containsAll(..)。
我可以在这里利用一些测试库吗?您如何测试您的收藏?
谢谢。
【问题讨论】:
标签: java unit-testing testing junit