【问题标题】:Can I use dotnet test --filter to run all default tests plus a specified Category?我可以使用 dotnet test --filter 运行所有默认测试以及指定的类别吗?
【发布时间】:2021-08-14 21:11:28
【问题描述】:

我想将我的 dotnet core nUnit 测试配置为默认禁用集成测试,允许所有非集成测试“默认”运行,并且在 CI 中还添加了集成测试。重要的是我不必装饰“默认”单元测试——这样就不会忘记正确标记它们,导致它们无法按预期运行。

到目前为止,我一直在尝试通过用[Explicit, Category("Integration")] 装饰它们来标记集成测试,例如:

[TestFixture, Explicit, Category("Integration")]
public class IntegrationTests {...}

[TestFixture]
public class UnitTests {...}

使用该设置dotnet test 可以正常工作-UnitTests 中的测试运行,IntegrationTests 被跳过。

但是,我很难通过 --filter 参数来运行默认设置和集成测试。运行 dotnet test --filter TestCategory=Integration运行集成测试。

我能做的最好的事情是结合FullyQualifiedName~Test(我的命名空间以Test开头)——dotnet test --filter "TestCategory=Integration|FullyQualifiedName~Test"

这可行,但很少有机会(没有充分理由)有人使用不同的根命名空间。

(仅供参考:我在 3.17.0 及以下版本中使用 NUnit 3.12.0NUnit3TestAdapter 4.0.0-beta.2 来避免使用 known issues with filters

【问题讨论】:

  • 假设所有测试都以“Test”开头,我希望您的解决方法过滤器表达式能够运行 所有 测试,包括 SomeOtherCategory 中的测试。
  • 好点!结果与--filter "FullyQualifiedName~Test" 相同——不是我想要的:-(

标签: c# unit-testing .net-core nunit


【解决方案1】:

IIRC,选择未指定类别的测试的能力已被讨论为 NUnit 的增强功能,但据我所知尚未实现。

我能想到的唯一解决方法是为所有测试添加一个类别,而这些测试还没有。您可以将其称为“默认”或“始终”或“无”或您喜欢的任何其他内容。然后在运行时指定TestCategory="Integration"|TestCategory="None"

明显的缺点是您必须为每个测试添加一个属性,然后在添加新类别时对其进行维护。

【讨论】:

  • 谢谢;很高兴听到我没有忽略一些非常简单的事情!我会把这个问题留一段时间,希望能有更多的意见,但希望你是对的。我的团队一直在讨论运行 dotnet test 两次——一次用于默认设置,一次用于集成测试,尽管报告可能会受到影响
猜你喜欢
  • 2017-07-22
  • 2016-04-20
  • 2020-11-30
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
相关资源
最近更新 更多