AssertJ
にはisEqualToIgnoringGivenFields
とisEqualToComparingFieldByFieldRecursively
があります。
ただし、一部のフィールドを無視して2つのオブジェクトを再帰的に比較する方法はありません。 this の議論によると、開発中である必要があります。
再帰的に比較するためにアサートの戻り値を取得する方法。ただし、一部のフィールドは無視します。他のライブラリでそれは可能ですか、それともAssertJ
を使用してどうにかしてそれを行うことができますか?
一部のフィールドを無視することはできませんでしたが、無視したいフィールドのコンパレータを導入して一時的に解決し、常にtrueと評価しました。これは流暢ではありませんが、仕事を成し遂げるための一時的な解決策です。
assertThat(object).usingComparatorForFields((x,y)->0,"field1","field2").isEqualToComparingFieldByFieldRecursively(expectedObject);
これには、2017年4月13日現在の 問題 があります。 動作しません コンパレータが比較しようとしているフィールドがnullの場合。これは、オブジェクトの1つがnull
の場合、両方がnull
の場合ではない場合に問題になります。
AssertJリリース3.12.0の最新の「再帰的比較APIの改善」により、再帰的比較を実行してフィールドを無視できるようになりました。
Assertions.assertThat(objActual)
.usingRecursiveComparison()
.ignoringFields("uniqueId", "otherId")
.ignoringFieldsMatchingRegexes(".*someId")
.ignoringOverriddenEqualsForTypes(MyData.class, MyDataItem.class)
.isEqualTo(objExpected);