数据驱动测试在NUnit的?
-
26-09-2019 - |
题
在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读取属性驱动参数测试。有可能是一个社区的插件地方虽然。
我还要指出的是,如果你只是寻找非MS单元测试框架库来帮助你,xUnit.net确实有这个功能。看看从本·霍尔这博客文章
其他提示
我被在NUnit的工作基于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<int[]> 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 /数据驱动测试功能于NUnit的与 - csv.html
下面是另一个例子非常相似,添阿贝尔然而真实不使用用于CSV读取器的框架,并示出了测试的细节。注意当您使用的TestCaseAttribute TestAttribute可以省略。
[TestCaseSource("GetDataFromCSV")]
public void TestDataFromCSV(int num1,int num2,int num3)
{
Assert.AreEqual(num1 + num2 ,num3);
}
private IEnumerable<int[]> 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数据:
10200210 20190210 30180210 40170210 50160210 60150210 70140210 80130210 90120210 100110210
注:第三列是前两列的总和,这将在单元测试中被断言
结果:
使用TestCaseData对象和设置返回类型(其场外是强制性的)查找替代以下
[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);
}
}
MS试验提供了一种机制以具有来自不同来源的测试数据。然而,这不是从NUnit的盒子的可用的。
我赞成使用分离为一些相当规模的试验的数据和代码。当我分开这两个,我的期望是 1.测试数据的可读性 2.测试数据应该很容易修改 3.单元测试应该在本地和构建环境舒适运行
在 JsonSectionReader 下面的所有功能,我想有。 该工具能够从嵌入JSON文件中读取数据的部分。它还提供了非常舒适的机制来反序列化。
https://www.nuget.org/packages/WonderTools.JsonSectionReader/一>
P.S。我是这个项目的维护者,而这个项目的形成是因为我没有找到任何其他工具,解决这个问题的程度,我想。
我认为NUnit的equivilent是标记一个方法作为设置方法,然后将数据加载到一个场中随后的测试中使用。
您必须代码它自己,更多或更少的