我有一个类,它定义只使用id属性。它还有另一个方法(称为“areSame”),它检查给定的参数是否具有与此对象属性相等的一些重要属性(并且它忽略id)。
在测试中,我想检查,如果两个集合使用areSame作为“自定义等于”方法是相同的 (最好忽略顺序而不依赖于hashCode,这显然与areSame不一致)。
我想知道,如果有更短的方式然后写一个包装器。写一些像
这样的东西会更愉快assertThat(actualCollection,
containsInAnyOrder_butUsingCustomEquals(expectedCollection, "areSame"));
Hamcrests示例,在处理集合时,只使用简单类型,虽然有可能比较像reflectEquals这样的对象,但我还没有弄清楚如何组合匹配器来做我想要的事情。
我正在使用JUnit,所以Hamcrest似乎是第一次使用,因为JUnit已经包含了一些匹配器。但由于我还没有与之相关,我认为使用AssertJ,Mockito或其他框架的解决方案是可以接受的。
那么,这在某些测试框架中是否可行或者我应该将其包装起来吗?
由于我很长时间的搜索并没有让任何人感到沮丧甚至没有成功地询问这个问题,我想大多数人都不会浪费时间来争取更多的线路而只是写封装和工厂转换集合,对吗?希望我没有错过... ...
答案 0 :(得分:1)
assertj擅长于此,尤其是其custom-comparison-strategy
assertThat(actual).usingElementComparator(customComparator).containsOnlyElementsOf(expectedCollection);
或更方便(无需使用预期元素进行收集)
assertThat(actual).usingElementComparator(customComparator).containsOnly(expected1, expected2);