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

标签 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() {}

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

最佳答案

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

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

关于c# - 使用整个数据表进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001001/

相关文章:

c#如何检查用户在文本框中输入的字符串是否为中文?

c# - Web 应用程序 - 解析器错误 - 无法加载类型

visual-studio-2008 - 如何在 Visual Studio 2008 中以随机顺序执行单元测试?

csv - Linux外壳: Detecting state changes on a CSV log file

python - 使用 boto3 从 S3 存储桶中读取多个 csv 文件

c# - 如何使用 AutoFixture 在保留类型自定义的同时使用自定义属性进行构建?

c# - WCF: "Error creating reader for MTOM message"

c# - 假货比 Mocks 好吗?

css - 我可以在响应式设计中测试视觉回归吗?

objective-c - 使一个变量依赖于另一个变量