10

我有一个测试方法,它将两个 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]));
      }
 }

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

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

4

3 回答 3

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; }
}

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

在这里查看更多详情。

于 2013-07-23T08:50:34.667 回答
2

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

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

于 2016-01-20T14:27:18.747 回答
0

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

于 2013-07-23T05:48:29.623 回答