用途:这是一份只读参考,帮助在已知测试平台(VSTest 或 MTP)与测试框架(MSTest、NUnit、xUnit v3、TUnit)后,写出正确的测试过滤命令。
VSTest 过滤(MSTest、xUnit v2、NUnit on VSTest):使用 dotnet test --filter "<表达式>",表达式形式为 <属性><运算符><值>,运算符包括 =(精确匹配)、!=(不精确匹配)、~(包含)、!~(不包含),组合符为 |(OR)与 &(AND),可用括号分组。无运算符的表达式视为 FullyQualifiedName~<值>。示例:dotnet test --filter "Name~LoginTest"、dotnet test --filter "ClassName=MyNamespace.MyTestClass"、dotnet test --filter "TestCategory=Integration"、dotnet test --filter "TestCategory!=Slow"。属性因框架而异:MSTest 支持 FullyQualifiedName、Name、ClassName、Priority、TestCategory;xUnit 支持 FullyQualifiedName、DisplayName、Traits;NUnit 支持 FullyQualifiedName、Name、Priority、TestCategory。
MTP 过滤:MSTest 与 NUnit 在 MTP 上沿用与 VSTest 相同的 --filter 语法,区别仅在传参方式——.NET SDK 8/9 用 dotnet test -- --filter "...",.NET SDK 10+ 用 dotnet test --filter "..."。
xUnit v3 on MTP 使用框架专用标志而非通用表达式:--filter-class、--filter-not-class、--filter-method、--filter-not-method、--filter-namespace、--filter-not-namespace、--filter-trait "name=value"、--filter-not-trait "name=value";同一标志可传多个值,如 --filter-class Foo Bar。复杂表达式用 --filter-query,路径语法为 /<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>[traitName=traitValue],每段匹配程序集名、命名空间、类名或方法名,* 表示匹配全部,详见 https://xunit.net/docs/query-filter-language。
TUnit 使用 --treenode-filter "/<Assembly>/<Namespace>/<ClassName>/<TestName>",各段支持通配符 ,可在测试名后追加属性条件,运算符含 、=、!=、&、|(OR 需在段内加括号)。示例:dotnet run --treenode-filter "///LoginTests/"、dotnet run --treenode-filter "////*[Category=Smoke]"。
迁移对照:MSTest、NUnit 及 xUnit v2(配合 YTest.MTP.XUnit2)的 VSTest --filter 语法在 VSTest 与 MTP 上一致,无需改动;xUnit v3 原生 MTP 不支持 VSTest --filter 语法,需翻译:FullyQualifiedName~ClassName 对应 --filter-class ClassName(子串匹配需通配符),FullyQualifiedName=Ns.Class.Method 对应 --filter-method Ns.Class.Method,Name=MethodName 对应 --filter-method MethodName,Category=Value 对应 --filter-trait "Category=Value",复杂表达式对应 --filter-query。
限制:本资料仅为过滤语法参考,需在已知平台与框架后按需加载;未提供安装步骤、版本兼容细节、性能或收费信息;实际可用属性以所用框架版本为准。