Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与DataTable行值进行比较_C#_Unit Testing_Datatable - Fatal编程技术网

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。