c# - 我可以使用 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.0
并NUnit3TestAdapter 4.0.0-beta.2
避免3.17.0 及以下版本的过滤器出现已知问题)
解决方案
IIRC,选择没有指定类别的测试的能力已被讨论为对 NUnit 的增强,但据我所知尚未实现。
我能想到的唯一解决方法是为所有测试添加一个类别,而这些测试还没有。您可以将其称为“默认”或“始终”或“无”或其他任何您喜欢的名称。然后,在运行时,指定TestCategory="Integration"|TestCategory="None"
.
明显的缺点是您必须为每个测试添加一个属性,然后在添加新类别时对其进行维护。
推荐阅读
- c++ - 销毁二叉搜索树时的读取访问冲突
- sql - 如何使用 2 列比较选择另一个表中不存在的行?
- angular - 使用 AngularCLI 6+,ng g universal xxx 中的 xxx 值是什么?
- python - 使用 multi_gpu_model 和 layers.trainable = True 时,keras 微调预训练模型不会改变权重
- python - 对 scipy.optimize 函数使用约束向量
- ffmpeg - 为什么最大ffmpeg mjpeg质量这么低?
- php - Laravel 5.4 使用计算字段进行排序、查询和显示
- r - 如何用不同的值替换数据框列中的负值
- python - 如何捕获非 ASCII 字符错误?
- java - 在java中分几个部分或段下载文件