NUnit中的数据驱动测试?

在MSTest中,您可以执行以下操作:

[TestMethod] [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "testdata.csv", "testdata#csv", DataAccessMethod.Sequential)] public void TestSomething() { double column1 = Convert.ToDouble(TestContext.DataRow["column1"]); ... Assert.AreEqual(...); } 

NUnit 2.5中的等效代码是什么?

我会看看NUnit 2.5中的参数化测试文档 ,看看你是否可以做一些像你在那里做的事情。 我不记得NUnit有内置的CSV读取属性来驱动参数化测试。 某处可能有社区插件。

我还应该指出,如果您只是寻找非MSunit testing框架库来帮助您,xUnit.net确实具有此function。 看看Ben Hall的这篇博客文章

我在NUnit中进行了基于csv的数据驱动测试,工作如下:

使用代码项目中的csv reader ,包含在一个私有方法中,返回测试类中的IEnumerable,然后在测试用例中使用TestCaseSource属性引用它。 在项目中包含csv文件,并将“ 复制到输出目录 ”设置为“ 始终复制”

 using System.Collections.Generic; using System.IO; using LumenWorks.Framework.IO.Csv; using NUnit.Framework; namespace mytests { class MegaTests { [Test, TestCaseSource("GetTestData")] public void MyExample_Test(int data1, int data2, int expectedOutput) { var methodOutput = MethodUnderTest(data2, data1); Assert.AreEqual(expectedOutput, methodOutput, string.Format("Method failed for data1: {0}, data2: {1}", data1, data2)); } private int MethodUnderTest(int data2, int data1) { return 42; //todo: real implementation } private IEnumerable GetTestData() { using (var csv = new CsvReader(new StreamReader("test-data.csv"), true)) { while (csv.ReadNextRecord()) { int data1 = int.Parse(csv[0]); int data2 = int.Parse(csv[1]); int expectedOutput = int.Parse(csv[2]); yield return new[] { data1, data2, expectedOutput }; } } } } } 

原帖: http : //timwise.blogspot.com/2011/05/data-driven-test-in-nunit-with-csv.html

这是另一个与Tim Abell非常相似的例子,但是没有使用CSV阅读器的框架并显示测试的细节。 请注意,当您使用TestCaseAttribute时,可以省略TestAttribute。

  [TestCaseSource("GetDataFromCSV")] public void TestDataFromCSV(int num1,int num2,int num3) { Assert.AreEqual(num1 + num2 ,num3); } private IEnumerable GetDataFromCSV() { CsvReader reader = new CsvReader(path); while (reader.Next()) { int column1 = int.Parse(reader[0]); int column2 = int.Parse(reader[1]); int column3 = int.Parse(reader[2]); yield return new int[] { column1, column2, column3 }; } } public class CsvReader : IDisposable { private string path; private string[] currentData; private StreamReader reader; public CsvReader(string path) { if (!File.Exists(path)) throw new InvalidOperationException("path does not exist"); this.path = path; Initialize(); } private void Initialize() { FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read); reader = new StreamReader(stream); } public bool Next() { string current = null; if ((current = reader.ReadLine()) == null) return false; currentData = current.Split(','); return true; } public string this[int index] { get { return currentData[index]; } } public void Dispose() { reader.Close(); } } 

CSV数据:

10,200,210 20,190,210 30,180,210 40,170,210 50,160,210 60,150,210 70,140,​​210 80,130,210 90,120,210 100,110,210

注意:第3列是前两列的总和,这将在unit testing中声明。

结果:

结果

使用TestCaseData对象查找下面的替代方法并设置返回类型(必须使用off-course)

  [TestCaseSource("GetDataFromCSV2")] public int TestDataFromCSV2(int num1, int num2) { return num1 + num2; } private IEnumerable GetDataFromCSV2() { CsvReader reader = new CsvReader(path); while (reader.Next()) { int column1 = int.Parse(reader[0]); int column2 = int.Parse(reader[1]); int column3 = int.Parse(reader[2]); yield return new TestCaseData(column1, column2).Returns(column3); } } 

我认为Nunit等效是将方法标记为设置方法,然后将数据加载到要在后续测试中使用的字段中。

你必须或多或少地自己编写代码。