大家好,我是 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 tests), Failed: One or more child tests had errors TheCountsAreCorrect(), Ignored: No arguments were provided TheCountsAreCorrect(System.Collections.Generic.List
1[System.String],2), Success TheCountsAreCorrect(System.Collections.Generic.List
1[System.String],3), Success
所以第一个测试被忽略了,因为没有参数,但我不想运行这个测试,永远,它没有意义,它会弄乱我的测试输出。我尝试忽略它并正确设置测试输出但是当我再次运行所有测试时它又回来了。
有没有我遗漏的东西,我到处都找过了。
最佳答案
TestCase
和 TestCaseSource
做两件不同的事情。您只需删除 TestCase
属性即可。
[TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)
{
Assert.AreEqual(expectedCount,Calculations.countThese(entries));
}
TestCase属性用于提供内联数据,因此 NUnit 试图不向测试提供任何参数,这是失败的。然后它正在处理 TestCaseSource属性,并查找它提供的数据并尝试将其也传递给测试,测试工作正常。
作为旁注,严格来说,文档建议您还应该使用 Test
属性标记您的 TestCaseSource
测试,如下所示,但我从未发现这个必要的:
[Test, TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)
关于c# - Nunit 使用 TestCaseSource 运行 TestCase,第一次迭代没有参数?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30827144/