5

嗨,我是 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.List1[System.String],3),成功

所以第一个测试被忽略了,因为没有参数,但我不希望这个测试运行,永远,它没有意义,它弄乱了我的测试输出。我尝试忽略它并正确设置测试输出,但是当我再次运行所有测试时它又回来了。

有什么我想念的吗,我到处找。

4

1 回答 1

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)
于 2015-06-14T08:25:36.223 回答