equals()メソッドのないクラスがあり、そのクラスにソースがないとします。そのクラスの2つのインスタンスで同等性を主張したいと思います。
複数のアサートを実行できます。
assertEquals(obj1.getFieldA(), obj2.getFieldA());
assertEquals(obj1.getFieldB(), obj2.getFieldB());
assertEquals(obj1.getFieldC(), obj2.getFieldC());
...
初期のアサーションが失敗した場合、完全な平等の全体像が得られないため、このソリューションは好きではありません。
手動で比較して結果を追跡できます。
String errorStr = "";
if(!obj1.getFieldA().equals(obj2.getFieldA())) {
errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n";
}
if(!obj1.getFieldB().equals(obj2.getFieldB())) {
errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + "\n";
}
...
assertEquals("", errorStr);
これは私に完全な平等の全体像を与えますが、不格好です(そして私は起こりうるヌルの問題を説明していません)。3番目のオプションはComparatorを使用することですが、compareTo()はどのフィールドが同等に失敗したかを教えてくれません。
サブクラス化して等しい(ugh)をオーバーライドせずに、オブジェクトから必要なものを取得するためのより良い方法はありますか?