我有一种根据值的数据表计算类内相关性的方法。我想为此方法编写一个单元测试,该单元测试将从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属性是为了在单个测试方法下运行多个测试。可以将其与数据驱动测试或参数化测试进行比较。这个想法是允许您指定多组参数,每组参数用于一次测试。因此,您的测试一次只能读取一行,因为它设计为每行运行一次测试。

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

10-05 20:24
查看更多