在编写一些通用测试逻辑时,我经常使用反射。在给定的情况下,我遍历一个类的所有字段并比较这些字段的值。这些字段可以是数组类型,因此我必须对此进行区分:
Field[] fields = beanBeforeStore.getClass().getDeclaredFields();
or (Field field : fields) {
...
if (field.getType().isArray()) {
// How to best compare?
}
...
}
这是JUnit
测试的全部部分,该测试提供了assertArrayEquals
,对于原始类型数组和对象数组而言,该.class1 {
position: relative;
background-image: url("https://images.sftcdn.net/images/t_app-cover-l,f_auto/p/ce2ece60-9b32-11e6-95ab-00163ed833e7/260663710/the-test-fun-for-friends-screenshot.jpg");
background-size: contain;
background-repeat: no-repeat; height: 100px;
width: 100px;
}
已被重载。因此,为了进行比较,我必须将值转换为数组类型。
因为我想让这部分通用,所以我有一个问题,就是数组可以是原始类型,也可以是任何对象类型。最好的方法是什么?
一些背景信息:此逻辑是测试已保存对象的一部分。因为对象不是作为一个整体持久存在,而是仅作为数据持久存在(不需要序列化可能反过来引用其他对象的服务)。每个领域的测试都需要具体。一些字段必须相同,而其他字段则必须相同(通过等号)。尽管某些对象实现了equals方法,但并非所有需要检查的字段都属于equals逻辑。
答案 0 :(得分:0)
尝试:
java.util.Arrays.deepEquals(array1, array2);
答案 1 :(得分:0)
我建议不要在合理的地方避免反思。否则,从声音上看,Objects.equals
似乎合适。