1

DAO サービスの統合テストを書いています。dao insert メソッドを使用し、データベースからオブジェクトを読み取り、元のオブジェクトですべてのフィールドをアサートすることで、これを実行します。

assertj-core を使用してアサーションを作成したいと考えています。特にisEqualToComparingFieldByField

しかし、java.util.Date フィールドには問題があります。それらは同一の getTime() 値を返しますが、等しくありません。

現在、isEqualToComparingFieldByField アサーションでこれらのフィールドを無視し、hasSameTimeAs メソッドと比較しています。

assertThat(object).isEqualToIgnoringGivenFields(other, "time");
assertThat(object.getTime()).hasSameTimeAs(other.getTime());

特定のタイプ (この場合は java.util.Date) の isEqualToComparingFieldByField メソッドにカスタム コンパレータを提供する方法、またはこの問題を回避するためにフィールドごとに 2 つのオブジェクトをアサートするその他のソリューションはありますか?

4

2 に答える 2

0

SQL からオブジェクトを取得すると、タイムスタンプと日付が混在しています。

Date date = theTwoTowers.getReleaseDate();
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());

// timestamp is a Date, it can be compared to date 
assertThat(date.equals(timestamp)).isTrue();

// as date is not a Timestamp, it can't be equal to timestamp  
assertThat(timestamp.equals(date)).isFalse();

このリンクはあなたを助けることができます: https://github.com/joel-costigliola/assertj-core/issues/273

于 2015-11-04T16:38:57.930 に答える