C# 如何在C中使用大量列对DataRow进行单元测试#

C# 如何在C中使用大量列对DataRow进行单元测试#,c#,winforms,unit-testing,mocking,C#,Winforms,Unit Testing,Mocking,在C#中单元测试数据行的最佳方法是什么 我有一个类架构,其中所有数据都存储在DataRow变量中。它是如何工作的?例如,当我双击customers列表中的一条记录时,我将Customer表中的整个记录加载到_dataRow变量中。 问题是Customer表有200多列 问题是,我是否需要手动创建DataRow变量并填充每个测试方法中的所有列?或者可能有一些模拟工具来模拟所有DataRow列 class Customer { private DataRow _dataRow; p

在C#中单元测试数据行的最佳方法是什么

我有一个类架构,其中所有数据都存储在DataRow变量中。它是如何工作的?例如,当我双击customers列表中的一条记录时,我将Customer表中的整个记录加载到_dataRow变量中。 问题是Customer表有200多列

问题是,我是否需要手动创建DataRow变量并填充每个测试方法中的所有列?或者可能有一些模拟工具来模拟所有DataRow列

class Customer
{
    private DataRow _dataRow;

    public Customer(DataRow dataRow)
    {
        _dataRow = dataRow;
    }

    private string GetCustomerName()
    {
        return Convert.ToString(_dataRow["Name"]);
    }

    private string GetCustomerAddress()
    {
        return Convert.ToString(_dataRow["Street"]) + " " + Convert.ToString(_dataRow["House_No"]);
    }

    private int GetAge()
    {
        DateTime birthdate = Convert.ToDateTime(_dataRow["Birthdate"]);
        DateTime today = DateTime.Today;
        int age = today.Year - birthdate.Year;
        if (birthdate > today.AddYears(-age))
            age--;
        return age;
    }
}

您不需要在每个测试中模拟/设置DataRow的每一列。每个测试应该只测试一小部分功能,因此应该只使用200列的子集

任何影响测试输出的列都应该显式设置或模拟(即,没有快捷方式!)。如果某个特定列不影响测试的输出,但仍然需要设置(例如,为了防止抛出异常),那么可能需要重新考虑类的设计


如果在考虑了这一点之后,仍然需要在每个测试中设置所有200个列,然后考虑创建一个方法,该方法创建一个填充了200个默认值的数据行,然后重写对该特定测试重要的值。根据第1段,这应该只是每个测试中200列的一小部分。

您不需要在每个测试中模拟/设置数据行的每一列。每个测试应该只测试一小部分功能,因此应该只使用200列的子集

任何影响测试输出的列都应该显式设置或模拟(即,没有快捷方式!)。如果某个特定列不影响测试的输出,但仍然需要设置(例如,为了防止抛出异常),那么可能需要重新考虑类的设计


如果在考虑了这一点之后,仍然需要在每个测试中设置所有200个列,然后考虑创建一个方法,该方法创建一个填充了200个默认值的数据行,然后重写对该特定测试重要的值。根据第1段,这应该只是每个测试中200列中的一小部分。

为什么不能使用带有记录的硬编码数据表并在单元测试中注入数据行?为什么不能使用带有记录的硬编码数据表并在单元测试中注入数据行?谢谢,这听起来很合乎逻辑。我将使用200列中的一个子集,只使用测试方法需要的这些列。谢谢,听起来很有逻辑。我将使用200列中的一个子集,仅使用测试方法所需的这些列。