使用数组在C#中进行数据驱动测试

Vij*_*jay 10 c# unit-testing mstest .net-4.5

我有一个测试方法,它将两个XML文件作为输入并进行比较.我正在使用Microsoft.VisualStudio.TestTools.UnitTesting框架.NET 4.5.我想修改测试方法,以便它需要多个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]));
      }
 }
Run Code Online (Sandbox Code Playgroud)

在做了一些研究后,我发现DataSource可以使用该属性.但我不知道如何将两个数组(或单个二维数组)传递给该DataSource属性.我更愿意Microsoft.VisualStudio.TestTools.UnitTesting用于测试和其他第三方框架,NUnit仅作为最后的手段.

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

cha*_*sos 8

您可以使用DataSource具有拖动列的csv文件(一个用于源,一个用于目标).然后在您的测试中使用它如下:

[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; }
}
Run Code Online (Sandbox Code Playgroud)

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

点击此处了解更多详情.


小智 0

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

  • 您能详细说明一下吗?也许给出一些演示代码。 (5认同)