Nunit使用TestCaseSource运行TestCase,第一次迭代没有参数?为什么?

Phi*_*hil 5 c# nunit unit-testing testcase testcasesource

嗨,我是Nunit的新手,我将一系列对象作为TestCaseSource传递给TestCase.出于某种原因,虽然Nunit似乎首先运行测试,没有传递给它的参数,这导致忽略输出:

考试:

private readonly object[] _nunitIsWeird =
{
    new object[] {new List<string>{"one", "two", "three"}, 3},
    new object[] {new List<string>{"one", "two"}, 2}

};

[TestCase, TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)
{
    Assert.AreEqual(expectedCount,Calculations.countThese(entries));
}
Run Code Online (Sandbox Code Playgroud)

TheCountsAreCorrect(3次测试),失败:一个或多个子测试有错误TheCountsAreCorrect(),忽略:没有提供参数TheCountsAreCorrect(System.Collections.Generic.List 1[System.String],2), Success TheCountsAreCorrect(System.Collections.Generic.List1 [System.String],3),成功

因此,第一个测试被忽略,因为没有参数,但我不希望这个测试运行,永远,它没有意义,它正在破坏我的测试输出.我尝试忽略它并正确设置测试输出但是当我再次运行所有测试时它会回来.

有什么我想念的东西,我到处寻找.

for*_*rir 6

TestCaseTestCaseSource做两件事.您只需要删除该TestCase属性.

[TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)
{
    Assert.AreEqual(expectedCount,Calculations.countThese(entries));
}
Run Code Online (Sandbox Code Playgroud)

测试用例属性是用于供给内联数据,所以NUnit的尝试没有参数提供给所述测试,失败.然后它处理TestCaseSource属性,并查找它提供的数据并尝试将其传递给测试,这是正常工作的.

作为旁注,严格来说,文档建议您还应该TestCaseSource使用Test下面的属性标记您的测试,但我从未发现这是必要的:

[Test, TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)
Run Code Online (Sandbox Code Playgroud)