我正在为一个从数据表中填充对象的方法编写单元测试。在一个特定的单元测试中,我想检查如果数据行中有一个空值,对象将如何填充。如果我将DBNull.value分配给数据行,则在运行测试时会出现异常。
我已在下面发布了测试对象 -
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 :(得分:0)
当您读取该值时,请使用可为空的int:
ChannelId = row.Field<int?>("EventId")
如果您请求的数据类型可以为空, DBNull
将自动转换为null
。