0

私は、似たようなことを異なるクラスで行う多くの単体テストを書いています。

同じクラスのセットを比較したい。クラスは id プロパティを指定します。セット A では、このプロパティはすべて null です。セット B では、このプロパティが設定されます。(セット B はデータベースに保存され、uid が設定されています)。

私の単体テストでは、セット A がセット B と一致することを確認したいのですが、明らかに id フィールドを確認したくありません。

これを行うための最も効率的でクリーンでドライな方法は何ですか?

4

4 に答える 4

1

まず、2 つのセットのサイズを比較します。等しくない場合、テストは失敗します。

重要なケースではjava.util.Comparator、セット要素に対して a を定義し、このコンパレーターに従って両方を並べ替えます (比較したくないプロパティを含めたり省略したりできます)。次に、両方のセットを反復処理し、ルールに基づいて要素を比較します (私があなたの主張を正しく理解していれば、コンパレーターによって定義されたものとは異なります)。

私はあなたがすでにequalsandhashCodeメソッドを適切に定義しており、テストのためにそれらを変更したくないと仮定しています。

于 2013-04-10T10:50:42.837 に答える
0

重複項目ロジックの比較は、equals()メソッドを使用して Java で実現されます。

myString.equals("これを比較");

カスタム タイプのオブジェクトを比較する必要がある場合は、equals メソッドをオーバーライドする必要があります。

Student student1=new Student();
Student student2=new Student();
student1.equals(student2);

ただし、 equals() メソッドをオーバーライドするときは注意してください。いくつかの一意の ID に基づいて比較の基礎を提供する必要があります。たとえば、次の実装では、ロール番号を比較用の一意の ID として使用しています。

public class Student {

  private int rollNo;
  private String name;
  private String address;


    // Getters and Setters

@Override
  public int hashCode() {
   // Overide this only when you use Hashing implementations
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      System.out.println("Not Equal due to NULL");
      return false;
    }
    if (this == obj) {
      System.out.println("Equals due to same reference");
      return true;
    }
    if (getClass() != obj.getClass()) {
      System.out.println("Different Type");
      return false;
    }
    Student other = (Student) obj;
    if (rollNo == other.rollNo) {
      System.out.println("RollNo " + rollNo + " EQUALS " + other.rollNo);
      return true;
    }
    if (rollNo != other.rollNo) {
      System.out.println("RollNo " + rollNo + " NOT EQUALS " + other.rollNo);
      return false;
    }
    System.out.println("Default is FALSE");
    return false;
  }

}
于 2013-04-10T11:01:23.940 に答える