Ran*_*ron 1 java xml graph-theory equals
我怎样才能找出导致equals()返回false的原因?
我不是在问一个确定的方法,总是正确的方法,而是一些有助于开发过程的东西.目前我必须进入equals()调用(通常是它们的树),直到其中一个为假,然后进入它,令人作呕.
我想过使用对象图,将其输出到xml并比较两个对象.但是,XMLEncoder需要默认构造函数,jibx需要预编译,x-stream和简单的api不在我的项目中使用.我不介意将一个类,甚至一个包复制到我的测试区域并在那里使用它,但导入整个jar只是不会发生.
我还想过自己构建一个对象图遍历器,我可能仍然会这样做,但我不想开始处理特殊情况(有序集合,非有序集合,映射......)
知道如何去做吗?
编辑:我知道添加罐子是正常的做事方式.我知道罐子是可重复使用的单位.然而,(在我的项目中)所需的官僚机构并不能证明结果是合理的 - 我会继续进行调试和踩踏.
这可能不是一个完整的图表比较...除非你的等于包括每个类中的每个属性...(你可以尝试== :))
尝试使用hamcrest匹配器 - 您可以在"全部"匹配器中组合每个匹配器:
Matcher<MyClass> matcher = CoreMatchers.allOf(
HasPropertyWithValue.hasProperty("myField1", getMyField1()),
HasPropertyWithValue.hasProperty("myField2", getMyField2()));
if (!matcher.matches(obj)){
System.out.println(matcher.describeFailure(obj));
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
它会说:'期望myField1的值为"value"但是"不同的值"
当然,您可以内联静态工厂.这比使用apache-commons EqualsBuilder稍微重一点,但它确实可以准确描述失败的确切内容.
您可以创建自己的专用匹配器来快速创建这些表达式.在这里复制apache-commons EqualsBuilder是明智的.
BTW,hamcrest基本jar是32K(包括来源!)让你可以选择查看代码并对你的老板说"我会坚持这个作为我自己的代码"(我认为这是你的导入问题).
| 归档时间: |
|
| 查看次数: |
1424 次 |
| 最近记录: |