嗨,我是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));
}



因此,第一个测试将被忽略,因为没有参数,但是我永远都不想运行此测试,这毫无意义,并且正在破坏我的测试输出。我试着忽略它,并正确设置了测试输出,但是当我再次运行所有测试时,它又回来了。

有什么我想念的东西,我到处都看过了。

最佳答案

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)

关于c# - Nunit使用TestCaseSource运行TestCase且第一次迭代没有参数?为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30827144/

10-08 22:48