如何在 NUnit 中将元组与 TestCasesSource 一起使用?

问题描述

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

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

测试仅通过部分 - 它通过了 Assert.AreEqual 但不知何故它没有通过整个测试(很奇怪,因为只有一组参数?)并显示 1 个测试尚未运行

这是测试源代码

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

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

Test Explorer Window Output

我是否遗漏了什么或做错了什么?

提前致谢

解决方法

您的测试采用两个参数,均为 (int,int,int)。测试用例源中的 yield 语句返回一个参数,它是一个 (int,int) 数组。那不是一回事。

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...