2009-12-16 28 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,前提是您请求的数据类型可以为空。