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

使用数组在C#中进行数据驱动测试,c#,unit-testing,mstest,.net-4.5,C#,Unit Testing,Mstest,.net 4.5,我有一个测试方法,它将两个XML文件作为输入并比较它们。我正在.NET4.5上使用Microsoft.VisualStudio.TestTools.UnitTesting框架。我想修改测试方法,使其接受多个XML文件(一次两个成对),运行测试并分别给出结果 我尝试了下面的代码,但它只给出一个输出,并且在任何一对输入文件未通过测试时停止 string[] source = {file1, file2, file3, file4....}; string[] target = {fileA, f

我有一个测试方法,它将两个XML文件作为输入并比较它们。我正在
.NET4.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]));
      }
 }
string[]source={file1,file2,file3,file4..};
字符串[]目标={fileA,fileB,fileC,fileD…};
[试验方法]
公共无效测试用例01()
{
TestLogic testObj=new TestLogic();//包含比较方法的类
for(int i=0;i
在做了一些研究之后,我发现可以使用
DataSource
属性。但我不知道如何将两个数组(或单个二维数组)传递给
数据源
属性。 我更愿意使用
Microsoft.VisualStudio.TestTools.UnitTesting
进行测试,而其他第三方框架(如
NUnit
)只能作为最后手段

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

简单地等同于可以工作的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; }
}
测试将在数据源的各行中迭代,并对每一行运行一次


查看更多详细信息。

我遇到了类似的问题,并在最后遵循了

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


因此,使用这种方法,我必须从两个文件夹中读取文件,根据它们的ID将它们配对,然后将配对的文件名保存在CSV文件中,由测试用例读取。有没有更直接的方法?就像直接将数组传递给数据源一样?在您的问题中,您没有提到任何关于配对的内容。他们似乎已经配对了。只是字符串数组(我建议使用路径),所以我的解决方案是将这些数组(成对的路径)放在scv中并从那里读取它们。这样,您就不需要在不更改代码的情况下复制测试用例和添加更多成对路径。如果你在测试中有额外的功能,请编辑你的问题。顺便说一句,我的答案不限于4个文件。如果您想在任何时候添加一个新的对,只需编辑csv并添加一个新行。这就是全部。测试用例也将执行此rowI。我已经用详细信息更新了问题。抱歉说得不够清楚。@Schaliasos是的,我认为您的解决方案肯定会奏效。我只是想知道是否有更直接的方法,因为随着项目的进展,不同类型的文件会增加更多的复杂性,我必须为这些文件编写不同的测试类。你能详细说明一下吗?可能会给出一些演示代码。这看起来与OP试图避免的原始解决方案相同,例如,“它只给出一个输出,当任何一对输入文件未通过测试时停止”