使用nunit、TestCaseSource和TestCaseData设置复杂的行测试

使用nunit、TestCaseSource和TestCaseData设置复杂的行测试,nunit,testcasesource,testcasedata,Nunit,Testcasesource,Testcasedata,对于每个预期返回值,如2或4,我希望将此值作为单元测试方法的参数传递。但是我得到一个例外,参数不正确。当我删除countExpected参数时,单元测试运行良好,我只是无法断言countExpected NUnit有可能出现这种情况吗 [Test, TestCaseSource("VisibleWeekDays")] public void Test(DayOfWeek[] visibleWeekDaysSetup, int countExpected) { // ARRANGE

对于每个预期返回值,如2或4,我希望将此值作为单元测试方法的参数传递。但是我得到一个例外,参数不正确。当我删除countExpected参数时,单元测试运行良好,我只是无法断言countExpected

NUnit有可能出现这种情况吗

[Test, TestCaseSource("VisibleWeekDays")]
public void Test(DayOfWeek[] visibleWeekDaysSetup, int countExpected)
{
    // ARRANGE

    // ACT

    // ASSERT
    Assert.That(periods.Count(),Is.EqualTo(countExpected));
}

private static IEnumerable<TestCaseData> VisibleWeekDays
{
    get
    {
        yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday}).Returns(2);
        yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday, DayOfWeek.Monday}).Returns(4);
        // more days...
    }
}
[测试,TestCaseSource(“VisibleWeekDays”)]
公共无效测试(DayOfWeek[]可访问的WeekdaysSetup,预期整数)
{
//安排
//表演
//断言
Assert.That(periods.Count(),Is.EqualTo(countExpected));
}
私有静态IEnumerable VisibleWeekday
{
得到
{
返回新的TestCaseData(newDayOfWeek[]{DayOfWeek.Sunday});
返回新的TestCaseData(newDayOfWeek[]{DayOfWeek.Sunday,DayOfWeek.Monday});
//还有几天。。。
}
}
参见说明:

。返回
从方法返回的预期结果,该方法必须具有兼容的返回类型

因此,如果您想使用
TestCaseData.Returns()
,您需要按照以下方式编写测试:

[测试,TestCaseSource(“VisibleWeekDays”)]
公共int测试(DayOfWeek[]可访问的WeekdaysSetup)
{
//安排
//表演
//断言
returnperiods.Count();
}
更新:
如果您想将期望值作为参数传递,则需要将其作为常规测试用例数据传递。见示例:

[测试,TestCaseSource(“VisibleWeekDays”)]
公共无效测试(DayOfWeek[]可访问的WeekdaysSetup,预期整数)
{
...
Assert.That(periods.Count(),Is.EqualTo(countExpected));
}
私有静态IEnumerable VisibleWeekday
{
得到
{
返回新的TestCaseData(newdayofweek[]{DayOfWeek.Sunday},2);
收益率返回新的TestCaseData(newDayOfWeek[]{DayOfWeek.Sunday,DayOfWeek.Monday},4);
//还有几天。。。
}
}

好的,谢谢,这看起来很不寻常。我不明白为什么我的expectedCount不能作为方法参数返回。我已经更新了答案。提供了另一个示例,说明了如何将期望值作为参数传递。