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

本文关键字:单元测试 数据表 | 更新日期: 2023-09-27 18:05:15

我有一个基于值的数据表计算类内相关性的方法。我想为这个方法编写一个单元测试,它将从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() {}

是否有另一种方法或属性,将在整个数据集传递而不是逐行测试方法,或者我是否坚持编写代码来读取每一行并构建自己的数据表?

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

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

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