【问题标题】:Why is NUnit ignoring tests with Combinatorial/Values attributes?为什么 NUnit 忽略具有组合/值属性的测试?
【发布时间】:2021-05-21 07:45:18
【问题描述】:

我尝试在 NUnit 中使用 Combinatorial/Values 属性。

虽然它在本地工作,但在运行 NUnit 2.6.2 的 TeamCity 构建中会跳过带有这些属性的测试——构建报告表明该测试被忽略,但没有提供任何关于忽略它的原因的详细信息。

根据the documentationCombinatorial 属性(以及Values 属性)存在于 NUnit 2.5 中,因此我希望它在 NUnit 2.6 中仍受支持。

为什么会忽略测试?

这是重现该问题的最基本示例。在本地,两个测试都运行并给出完全相同的结果。在 TeamCity 上,只有 Test1 被执行,Test2 被标记为忽​​略。

[TestCase("a", "1")]
[TestCase("a", "2")]
[TestCase("b", "1")]
[TestCase("b", "2")]
public void Test1(string x, string y) {
    Assert.AreEqual(x + "," + y, string.Format("{0},{1}", x, y));
}

[Test, Combinatorial]
public void Test2([Values("a", "b")] string x, [Values("1", "2")] string y) {
    Assert.AreEqual(x + "," + y, string.Format("{0},{1}", x, y));
}

【问题讨论】:

  • 您在 TeamCity 中使用什么 runner 来运行 NUnit 测试?

标签: nunit teamcity nunit-2.6


【解决方案1】:

你的问题真的可以用一个代码示例来说明你在做什么......

尽管如此...我会试一试...

CombinatorialAttribute 只是告诉 NUnit 如何组合为测试方法的各个参数提供的值以创建测试用例。如果您没有为每个参数提供此类值,则没有可组合的内容,也不会创建测试用例。

通过使用 ValuesAttribute 和类似属性来提供各个值。提供此类值时,组合实际上是默认值,因此实际上不需要。

我的猜测是,没有看到你的代码,你没有给 CombinatorialAttribute 任何值来组合。

您可能想知道为什么在这种情况下没有错误消息。那是因为有些人创建的测试有时有可用的数据,有时没有。也许,一个可抑制的警告在这里会很有用。

由于您的问题仅出现在 TeamCity 中(我添加了一个标签),这可能只是 TeamCity 的问题。需要注意的一件事是,TeamCity 有时可能会报告与 NUnit 结果文件中包含的内容不同的内容......因此您应该检查该文件以确定 NUnit 是否真的跳过了测试,或者 TC 是否只是认为是。

【讨论】:

  • 很高兴能从 NUnit 的维护者那里得到答复。实际上,我确实使用了Values 属性(我在最初的问题中错误地将其命名为“值”);我编辑了我的问题以添加一个示例。另请注意,测试在我的机器上正确运行,所有检查都完全按预期完成,所以我不希望在我编写的代码中出现错误。只有当它从 TeamCity 运行时,组合测试才会被标记为忽​​略。
  • 我在想这个问题可能与异步测试有关,所以我简化了它们。即使是普通的非异步测试也存在问题。我再次编辑了我的答案以提供这个更简单的示例。
  • 我在答案中添加了一个 teamcity 标签和一些进一步的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多