C# 与DataTable行值进行比较
我需要为我创建的新方法创建一个单元测试。现在,我在比较实际结果和期望结果时遇到了一个问题 所讨论的方法是:C# 与DataTable行值进行比较,c#,unit-testing,datatable,C#,Unit Testing,Datatable,我需要为我创建的新方法创建一个单元测试。现在,我在比较实际结果和期望结果时遇到了一个问题 所讨论的方法是: public DataTable UniformDateFormat(DataTable durations, string targetColumn) { foreach (DataRow row in durations.Rows) { if (row[targetColumn].ToString().Length > 0)
public DataTable UniformDateFormat(DataTable durations, string targetColumn)
{
foreach (DataRow row in durations.Rows)
{
if (row[targetColumn].ToString().Length > 0)
{
DateTime conv = DateTime.Parse(row[targetColumn].ToString());
}
}
return durations;
}
此方法只需检查特定列,然后转换列的每个单元格(它是excel工作表)中的日期值,并将其转换为更统一的值
我的测试代码如下:
DataTable table = new DataTable();
table.Columns.Add("Reporting Date");
table.Rows.Add("12-06-2007");
test = new DurationData(excelConfig);
foreach (DataRow row in table.Rows)
{
result = row["Reporting Date"].ToString();
}
// the test I want to run
if (table.Columns.Contains("Reporting Date"))
{
result = test.UniformDateFormat(table, "Reporting Date").ToString();
Assert.AreSame("2007-06-12", result);
Console.Write("here");
}
当我运行此测试代码时,我得到以下输出:
消息:应为:与“2007-06-12”相同,但为:string.Empty
为了正确运行测试,我需要修改什么 通过调用
result = test.UniformDateFormat(table, "Reporting Date").ToString();
Assert.AreSame("2007-06-12", result);
。。。获取一个完整的数据表并对其调用.ToString()
。这只是返回其表名(property.TableName
),而该表名未在示例中设置。因此,将日期字符串与空字符串进行比较-这正是错误消息所告诉的
据我所知,该方法仅格式化日期值。您不应该使用它的返回值,而是应该循环遍历数据行,并将“Reporting Date”列中的值与日期字符串进行比较
我知道你试过任何类似的方法,但是你的第一个循环结束得很早。检查如下:
// format the dates BEFORE the loop
test.UniformDateFormat(table, "Reporting Date");
foreach (DataRow row in table.Rows)
{
// assert the date values for each row
string dateValue = row["Reporting Date"].ToString();
Assert.AreSame("2007-06-12", dateValue);
}
但是,请注意,方法
UniformDateFormat
不会对数据表做任何事情,因为它只是转换日期值,但不会将其写回。新方法是我无法修改的更大框架的一部分。如何使结果字符串成为datatable中唯一一行的值?我试图调用的是UniformDateFormat
方法很奇怪,它基本上什么都不做,只是尝试将字符串转换为datetimes,而不给那些datetimes分配任何变量。除此之外,UniformDateFormat
返回一个DataTable
,ToString
只返回表的TableName
属性(+DisplayExpressio
)。当然那不是日期。你确定方法UniformDateFormat
与你发布的代码相同,并且是更大框架的一部分吗?该方法不执行任何有意义的操作,而是返回传递给它的相同datatable。