在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当量码?

其他提示

下面是另一个例子非常相似,添阿贝尔然而真实不使用用于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是标记一个方法作为设置方法,然后将数据加载到一个场中随后的测试中使用。

您必须代码它自己,更多或更少的

scroll top