NUnit数据驱动单元测试与数据源

时间:2012-11-16 16:29:13

标签: c# unit-testing tdd nunit test-data

我有一个数据源,如-4,-3,-3,-2,-1,0,1,2,2,3,4,我有一个功能,这个功能可以捕获重复的数字,例如这个数据源我们有-3,2重复。重复的数字在程序结束时报告。 我找不到好的例子(我花了3个小时)。 我如何使用NUnit实现单元测试,可以测试相同的情况并告诉我结果,如果你有一些例子,它对我来说非常有用。(真的很感激)。

4 个答案:

答案 0 :(得分:4)

您可以将TestCase属性用于简单数据,例如您所描述的内容。

[Test]
[TestCase(new[] { -4, -3, -3, -2, -1, 0, 1, 2, 2, 3, 4 }, new []{-3,2})]
public void YourTest(int[] given, int[] expected)    
{  ... }

注意:ReSharper(至少我的版本)不支持像这样的多个测试用例,因此我必须使用NUnit GUI确认多个测试用例。

答案 1 :(得分:2)

首先要做的是 - 进行工作测试。像这样:

    [Test]
    public void DetectsMinusThreeAndTwo()
    {
        RepeatingDigitsDetector target = new RepeatingDigitsDetector();
        int[] source = new int[] { -4, -3, -3, -2, -1, 0, 1, 2, 2, 3, 4 };
        int[] expected = new int[] { -3, -2 };
        int[] actual = target.GetRepeats(source);
        Assert.AreEqual(expected.Length, actual.Length, "checking lengths");
        for (int i = 0; i < expected.Length; i++)
        {
            Assert.AreEqual(expected[i], actual[i], "checking element {0}", i);
        }
    }

稍后,您可以开始添加TestCaseTestCaseSource属性等内容。但是,如果您尝试进行TDD(如标记所示),则需要从 a 测试开始。

答案 2 :(得分:1)

我会在这个例子中推荐TestCaseSource。一些测试可能会使数据更难在TestCase属性中读取。

答案 3 :(得分:0)

随着测试数据变得复杂,将很难处理。 考虑将数据存储在其他来源(例如excel,json或数据库)中。

我个人喜欢将测试数据存储在嵌入式json文件中。 软件包JsonSectionReader为此提供了良好的支持。