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

问题描述 投票:2回答:4

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

c# unit-testing tdd nunit test-data
4个回答
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确认多个测试用例。


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(正如标签所暗示的那样),你需要从测试开始。


1
投票

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


0
投票

由于您的测试数据变得复杂,因此难以处理。考虑将数据存储在另一个源中,例如excel,json或Database。

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

© www.soinside.com 2019 - 2024. All rights reserved.