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将它们配对,然后将配对的文件传递给测试用例进行测试.我现在这样做的方法是将配对的文件名(源和目标)保存在数组或列表中,然后将它们传递给测试用例.显然这种方法不起作用,我遇到了上面提到的问题.
您可以使用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的行,并为每一行运行一次.
点击此处了解更多详情.