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

时间:2015-06-14 07:59:50

标签: c# unit-testing nunit 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));
}
  

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

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

我有什么遗失的东西,我到处寻找。

1 个答案:

答案 0 :(得分:6)

TestCaseTestCaseSource执行两项不同的操作。您只需要删除TestCase属性。

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

TestCase属性用于提供内联数据,因此NUnit尝试不向测试提供任何参数,这是失败的。然后它正在处理TestCaseSource属性,并查找它提供的数据,并尝试将其传递给测试,这是正常工作。

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

[Test, TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)