[seasar-dotnet:586] Re: S2Assert.AreEqual での NullReference エラーが発生する時がある

Ryo Miyagi [E-MAIL ADDRESS DELETED]
2007年 8月 27日 (月) 16:19:58 JST


宮城です。

nullが入ってくるケースがありますので
ご指摘の内容で修正いたしました。

今後とも何か問題がありましたらご連絡いただければと思います。


> いつもお世話になっております。
> 近藤です。
> 
> S2Assert.AreEqualを使ったDataTable同士のテストでNullReferenceのエラーが発生する時があります。
> 詳細としましては、
> データベースは、Oracle
> S2Dao及び、S2Containerは、1.3.0を利用しています。
> --■テストコード--------------------------------------------
> ReadXlsWriteDb("Resource/data2.xls");
> 
> this._hogeService.DoImport();
> List<Hoge> hoges = this._hogeLogic.GetAll();
> 
> DataTable table = Converter.ToDataTable(hoges); ←IList<T>をDataTableに変換しています
> 
> //UT00675
> DataSet dataSet = ReadXls("Service/UT00675.xls");
> S2Assert.AreEqual(dataSet.Tables[0], table, "UT00675");
> 
> -------------------------------------------------------------
> 
> 発生箇所は、
> Seasar.Extension.DataSets.Types.ObjectTypeのDoEquals内で、
> arg1とarg2に空文字が入っている場合に発生するみたいです。
> 
> 60: protected virtual bool DoEquals(object arg1, object arg2)
> 61: {
> 62:     try
> 63:     {
> 64:         if (IsNullable(arg1))
> 65:         {
> 66:             arg1 = DBNull.Value;
> 67:         }
> 68:         else
> 69:         {
> 70:             arg1 = Convert(arg1, null); ←ここarg1がnullになる
> 71:         }
> 72:     }
> 73:     catch
> 74:     {
> 75:         return false;
> 76:     }
> 77:     try
> 78:     {
> 79:         if (IsNullable(arg2))
> 80:         {
> 81:             arg2 = DBNull.Value;
> 82:         }
> 83:         else
> 84:         {
> 85:             arg2 = Convert(arg2, null);
> 86:         }
> 87:     }
> 88:     catch
> 89:     {
> 90:         return false;
> 91:     }
> 92:     return arg1.Equals(arg2); ←ここarg1がnullの時に発生
> 93: }
> 
> 直感で、そのままEqualsで判定するのはまずいと思いましたが、
> その上の過程でありえない現象なのかもしれませんし・・・
> 
> 下記のように回避策を施してみましたが他に回避策や、考えられる私のミスが
> 予想出来ましたらお教えください。
> 
> 92:     return arg1 != null ? arg1.Equals(arg2) : arg1 == arg2;
> 
> 
> どうぞよろしくお願いします。
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet





seasar-dotnet メーリングリストの案内