我尝试了Unitils工具,这非常棒,但没有为您提供排除字段的选项。这样做的唯一方法是将对象设置为null并启用标记" IGNORE_DEFAULTS",但在我的情况下它没有帮助,因为我已经有一些由系统自动生成的id。因此,如果我可以将id添加到排除列表中,那将是完美的。
我也尝试了Mockito ReflectionEquals,但没有帮助,因为我需要一个字段进行现场比较。
还有其他有用的东西吗?我没有成功地搜索了几个小时。
提前谢谢!
答案 0 :(得分:2)
可能assertj会有所帮助。
答案 1 :(得分:0)
如果你不喜欢你所发现的那些功能,那么使用java反射就很难自己动手。
答案 2 :(得分:0)
我们在groovy中使用我们自己的方法(类似于Frank Neblung's回答),我们使用ObjectMapper和属性的filterList将对象转换为格式化的Json字符串。这对于测试非常方便,但也有一些缺点,比如类型信息的丢失。
// interface of the conversion
String nice(Object o, String... filterList) { ... }
// test calls
assertEquals(nice(actual, ["-unusedAttribute", "-unusedAttribute2"]), nice(expected, ["-unusedAttribute", "-unusedAttribute2"]))
assertEquals(nice(actual, ["+usedAttibute", "+usedAttibute2"]), nice(expected, ["+usedAttibute", "+usedAttibute2"]))
// test calls using the spock framework
nice(actual, ["-unusedAttribute", "-unusedAttribute2"]) == nice(expected, ["-unusedAttribute", "-unusedAttribute2"])
nice(actual, ["+usedAttibute", "+usedAttibute2"]) == nice(expected, ["+usedAttibute", "+usedAttibute2"])