我需要为我创建的新方法创建单元测试。现在,我在将实际结果与我想要的结果进行比较时遇到了问题。
有问题的方法是:
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
为了正确运行测试,我需要修改什么?
答案 0 :(得分:0)
致电......
result = test.UniformDateFormat(table, "Reporting Date").ToString();
Assert.AreSame("2007-06-12", result);
...您需要一个完整的DataTable并在其上调用.ToString()
。这只是返回其样本中未设置的表名(属性.TableName
)。因此,您将日期字符串与空字符串进行比较 - 这正是错误消息所指示的内容。
据我所知,该方法UniformDateFormat
只是格式化日期值。您不应该使用其返回值,而是循环遍历数据行并比较列中的值"报告日期"用你的日期字符串。
我看到你尝试了类似的东西,但你的第一个循环结束到早。检查如下:
// 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执行任何操作,因为它只会转换日期值,但不会将其写回。