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

Atsushi   Kondou [E-MAIL ADDRESS DELETED]
2007年 8月 26日 (日) 22:58:35 JST


いつもお世話になっております。
近藤です。

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 メーリングリストの案内