2009-12-16 31 views
0

我正在爲從數據表填充對象的方法編寫單元測試。在一個特定的單元測試中,我想檢查如果數據行中有一個空值,對象將如何填充。如果我將一個DBNull.value分配給數據行,那麼運行測試時會出現異常。使用dbnull測試Linq 2 sql的單元

我已經發布根據下文的測試主題 -

return dt.AsEnumerable().Select(
    row => new ChannelManager{ ChannelId = row.Field<int>("EventId") }) 
    .ToList(); 

測試是 -

DataSet ds = new DataSet(); 
DataTable dt1 = new DataTable(); 
dt1.Columns.Add("EventId", typeof(int)); 
DataRow dr1 = dt1.NewRow(); 
dr1["EventId"] = DBNull.value; 
dt1.Rows.Add(dr1); 
ds.Tables.Add(dt1); 
if(!test.ChannelId.HasValue) 
      Assert.True(true); 

但我得到一個異常說不能投DBNull.Value鍵入 'System.Int'

+0

只是冒險猜測這裏..當你添加一列到dataTable,你必須指定它爲typeof(int?)來表明它是一個可能包含空值的整數列嗎? – Gishu 2009-12-16 04:45:04

+1

也將assert改爲'Assert.IsFalse(test.ChannelId.HasValue)':在眼睛上更容易。 – Gishu 2009-12-16 04:46:50

回答

0

當您讀取該值時,使用空值int:

ChannelId = row.Field<int?>("EventId") 

DBNull將自動轉換爲null,前提是您請求的數據類型可以爲空。