0

プリミティブ レベルと n レベルのオブジェクトの両方を含む 2 つの複雑なオブジェクトをアサートする必要があります。だから私はググって図書館を選んだunitils。しかし、null と空の文字列の両方を等しいと見なす必要があるという条件があります。しかし、ここではReflectionComparatorMode.IGNORE_DEFAULTS. シナリオ:

 public class AssertVerify {

    public static void main(String args[]){

    CustomerPojo cuPojo1=new CustomerPojo();
    CustomerPojo cuPojo2=new CustomerPojo();

    cuPojo1.setCustomerName("obuli");
    cuPojo1.setCustomerAge("20");
    cuPojo1.setAddress("");

    cuPojo2.setCustomerName("obuli");
    cuPojo2.setCustomerAge("20");


    /**
     * Asserting  two pojos
     */     
    ReflectionAssert.assertReflectionEquals(cuPojo1, cuPojo2,
            ReflectionComparatorMode.LENIENT_DATES ,ReflectionComparatorMode.IGNORE_DEFAULTS);

}       

エラー:

 junit.framework.AssertionFailedError: 
 Expected: CustomerPojo<customerName="obuli", customerAge="20", Address="">
  Actual: CustomerPojo<customerName="obuli", customerAge="20", Address=null>

  --- Found following differences ---
  Address: expected: "", actual: null

   --- Difference detail tree ---
  expected: CustomerPojo<customerName="obuli", customerAge="20", Address="">
   actual: CustomerPojo<customerName="obuli", customerAge="20",   Address=null>

  Address expected: ""
  Address   actual: null


   at junit.framework.Assert.fail(Assert.java:47)
    at      org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals(ReflectionA   ssert.java:136)at       org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals(ReflectionA   ssert.java:99)
atcom.assertion.verify.AssertVerify.main(AssertVerify.java:52) 

 picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true

null と空の文字列の両方を等しいと見なすルールを追加する必要があります。

私の状況で利用可能な解決策はありますか?

4

1 に答える 1

0

Gremash が述べたように、同等のインターフェイスを実装し、 equalsメソッドをオーバーライドする必要があります。これを急いではいけません。このインターフェイスを実装し、メソッドを使用する独自のオブジェクトを使用すると、コレクションで作業を台無しにする可能性があるため、自分が何をしているのかを確認してください。 (可能であれば)Core Java 1-2シリーズを見てください。この問題はこれらの本で議論され、詳細に説明されています。インスタンス equals() には、等価関係を定義する必要がある (再帰的、対称的、および推移的でなければならない) といういくつかの規則があります。

他のライブラリに頼るよりも、この方法を使用する方がよいと思います。

于 2016-03-31T11:15:24.430 に答える