【发布时间】:2017-05-16 19:47:20
【问题描述】:
我的项目的代码库有一个旧方法,它将 DataRow 作为参数,我想为其创建一个单元测试方法。
如何手动创建一个 DataRow 对象以传递给该方法? System.Data.DataRow 类没有面向公众的构造函数。
【问题讨论】:
标签: c# system.data
我的项目的代码库有一个旧方法,它将 DataRow 作为参数,我想为其创建一个单元测试方法。
如何手动创建一个 DataRow 对象以传递给该方法? System.Data.DataRow 类没有面向公众的构造函数。
【问题讨论】:
标签: c# system.data
可以通过创建一个新的 DataTable 实例,将与 DataRow 需要具有的“键”对应的列添加到 DataTable 中,然后在 DataTable 上调用 NewRow() 来创建 DataRow。例如:
DataTable usersTable = new DataTable();
usersTable.Columns.Add("FirstName");
usersTable.Columns.Add("LastName");
usersTable.Columns.Add("Email");
DataRow userRow = usersTable.NewRow();
userRow["FirstName"] = "Elmer";
userRow["LastName"] = "Example";
userRow["Email"] = "elmer@example.com";
usersTable.Rows.Add(userRow);
【讨论】:
您应该注意,如果单元测试需要对DataTable 的DataColumnCollection(列)实施类型约束,您可以使用DataColumn 类的重载构造函数来包含预期的Type。
var dt = new DataTable();
var dc = new DataColumn("Age", typeof(int));
dt.Columns.Add(dc);
var dr = dt.NewRow();
dr["Age"] = "test"; // throws an ArgumentException
//Input string was not in a correct format. Couldn't store<test> in Age Column. Expected type is Int32.
//should it succeed
dt.Rows.Add(dr);
【讨论】:
dt.Rows.Add(dr);