首页 > 解决方案 > 如何在 NUnit 中使用带有 TestCasesSource 的元组?

问题描述

我一直在使用NUnit unitl 在C#中编写一些测试我遇到了一个测试问题,我想通过2 次 3 项元组作为测试的参数。似乎与此处描述的类似问题:如何在 nunit TestCases 中使用元组?

因此,我通过引入新的静态方法并将其名称传递给TestCaseSource来实现该解决方案,但是在我的情况下它似乎并不能完全工作。唯一的区别是我的元组由3 个 Item 元组而不是2组成。

测试只是部分通过- 它通过了Assert.AreEqual但不知何故它没有通过整个测试(奇怪的是考虑到只有一组参数的事实?)并显示 1 test has not been run

下面是测试源代码:

    [Test]
    [TestCaseSource(nameof(TestGetTimeLeftData))]
    public void TestGetTimeLeft((int, int, int) alarmTime, (int, int, int) clockTime)
    {
        (int, int, int) expectedTime = (3, 0, 0);
        (int, int, int) result = Helper.GetTimeLeft(alarmTime, clockTime);
        Assert.AreEqual(expectedTime, result);
    }

    private static IEnumerable<(int, int, int)[]> TestGetTimeLeftData
    {
        get
        {
            yield return new[] { (2, 0, 0), (23, 0, 0) };
        }
    }

测试资源管理器窗口输出

我错过了什么或做错了什么?

提前致谢

标签: c#testingnunitvaluetupletestcasesource

解决方案


您的测试需要两个参数,都是(int, int, int). yield测试用例源中的语句返回一个参数,它是一个(int, int, int). 那不是一回事。

尝试返回一个TestCaseData对象...

private static IEnumerable<TestCaseData> TestGetTimeLeftData
{
    get
    {
        yield return new TestCaseData((2, 0, 0), (23, 0, 0));
    }
}

这可以使用对象数组来完成,但TestCaseData存在是为了更容易编写测试用例源。


推荐阅读