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