繁体   English   中英

在Java测试框架中使用自定义equals方法断言两个集合相等

[英]Assert two collections are equal using custom equals method in Java test frameworks

我有一个类, 仅使用id attribute定义了类。 它还有另一个方法(称为“ areSame”),该方法检查给定参数是否具有与该对象属性相同的重要属性(并且不考虑id)。

在测试中,我想使用areSame as“ custom equals”方法检查两个集合是否相同 (最好忽略顺序并且不依赖hashCode,这显然与areSame不一致)。

我想知道,是否有较短的方法然后编写包装器。 写这样的东西会更令人愉快

assertThat(actualCollection, 
containsInAnyOrder_butUsingCustomEquals(expectedCollection, "areSame")); 

Hamcrests的示例在处理集合时仅使用简单的类型,并且尽管可以比较诸如reflectEquals之类的对象,但我还没有弄清楚如何组合匹配器来完成我想要的事情。

我使用的是JUnit,因此Hamcrest似乎是第一选择,因为JUnit已经包含了一些匹配器。 但是由于我还没有束缚,我想使用AssertJ,Mockito或其他框架的解决方案是可以接受的。

那么,这在某些测试框架中是否可行,还是我应该对其进行总结?

由于我漫长的搜索并没有消除任何人甚至没有成功询问这个问题,我想大多数人都不会浪费时间去烦恼另外几行,而只是写包装器和工厂来转换集合,对吗? 希望我没有错过...

assertj擅长于此,尤其是其自定义比较策略

assertThat(actual).usingElementComparator(customComparator).containsOnlyElementsOf(expectedCollection);

或更方便(无需使用预期元素进行收集)

assertThat(actual).usingElementComparator(customComparator).containsOnly(expected1, expected2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM