首页 > 解决方案 > 我可以使用 dotnet test --filter 运行所有默认测试以及指定的类别吗?

问题描述

我想将我的 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"

这行得通,但是(没有充分理由)有人使用不同的根命名空间的可能性很小。

(仅供参考:我正在使用NUnit 3.12.0NUnit3TestAdapter 4.0.0-beta.2避免3.17.0 及以下版本的过滤器出现已知问题)

标签: c#unit-testing.net-corenunit

解决方案


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

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

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


推荐阅读