使用整个数据表进行单元测试

时间:2011-08-09 18:27:28

标签: c# unit-testing csv

我有一种方法可以根据值的数据表计算组内相关性。我想为这个方法编写一个单元测试,它将读取CSV文件的结果并将数据表传递给我编写的方法。我以为我可以使用方法上的DataSourceAttribute来传递整个数据集,但我想使用这种方法一次只能传递一行。

[TestMethod()]
    [DeploymentItem("IntraclassCorrelationValues.csv")]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\IntraclassCorrelationValues.csv", "IntraclassCorrelationValues#csv", Microsoft.VisualStudio.TestTools.UnitTesting.DataAccessMethod.Sequential)]
    public void TestCorrelation() {}

是否有另一个方法或属性会将整个数据集而不是逐行传递给测试方法,或者我是否仍然无法编写代码来读取每一行并自行构建数据表?

1 个答案:

答案 0 :(得分:0)

请注意,提供TestMethod的DataSource和DeploymentItem属性是为了在单个测试方法下运行多个测试。这可以与数据驱动测试或参数化测试进行比较。我们的想法是允许您指定多组参数,每组参数用于单次测试运行。因此,您的测试一次读取一行,因为它设计为每行运行一次测试。

如果“每次测试运行”的输入是一个或多个表,而不只是一行,我可以看到你可以将一个表压平成一行,然后在测试中再次展开它(这只是一个选项,允许您设计自定义展平/扩展代码)。我可以想到其他选择,但我想这取决于你的目标。如果您需要在不重建测试的情况下轻松更改测试输入,那么此数据驱动模型是最佳选择。如果您只是想用一个数据表来驱动测试(在将来的测试运行中不会改变),那么考虑一些更静态,硬编码的测试。此外,这可以使测试更具可读性。你总是可以编写代码来伪造源代码。