使用数组的C#中的数据驱动测试

本文关键字:数据驱动 测试 数组 | 更新日期: 2023-09-27 18:24:16

我有一个测试方法,它将两个XML文件作为输入并进行比较。我在.NET 4.5上使用Microsoft.VisualStudio.TestTools.UnitTesting框架。我想修改测试方法,使其获取多个XML文件(一次两个文件成对),运行测试并分别给出结果。

我尝试了以下代码,但它只给出一个输出,当任何一对输入文件未通过测试时就会停止。

 string[] source = {file1, file2, file3, file4....};
 string[] target = {fileA, fileB, fileC, fileD....};
 [Test Method]
 public void TestCase01()
 {
      TestLogic testObj = new TestLogic(); //class containing the comparison method
      for (int i = 0; i < source.Length; i++)
      {
            Assert.IsTrue (testObj.VerifyFiles(source[i], target[i]));
      }
 }

通过研究发现DataSource属性是可以使用的。但我不知道如何将两个数组(或单个二维数组)传递给DataSource属性。我更愿意使用Microsoft.VisualStudio.TestTools.UnitTesting进行测试,而其他第三方框架(如NUnit)只能作为最后手段。

编辑:我不知道输入文件的数量。我使用了4个文件作为示例。在将文件传递给TestMethod之前,我使用它们的ID对它们进行配对。因此,我首先从两个不同的文件夹中读取两组文件,根据它们的ID对它们进行配对,然后将配对的文件传递给测试用例进行测试。我现在的做法是将配对的文件名(源和目标)保存在数组或列表中,然后将它们传递给测试用例。显然,这种方法不起作用,我遇到了上面提到的问题。

使用数组的C#中的数据驱动测试

您可以使用一个csv文件作为DataSource,该文件将有两列(一列用于源,一列用于目标)。然后在你的测试中使用它如下:

[TestClass]
public class TestCase
{
    [TestMethod]
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "files.csv", "files#csv", DataAccessMethod.Sequential)]
    public void TestCase()
    {
        TestLogic testObj = new TestLogic();
        string source = (string) TestContext.DataRow["source"]; // get the value from the 'source' column
        string target = (string) TestContext.DataRow["target"]; // get the value from the 'target' column
        Assert.IsTrue(testObj.VerifyFiles(source, target));
    }
   public TestContext TestContext{ get; set; }
}

测试将遍历DataSource的行,并为每行运行一次。

查看此处了解更多详细信息。

我也遇到了类似的问题,最后遵循了这篇博客文章的建议,

我们使用了一个匿名类型数组来存储我们的条件集,然后使用LINQ的ForEach()方法在数组中循环并为每个元素运行测试。

简单地等同于可以工作的数据源实例=数组。循环中的数据源行和作为数组实例的行值。