问题描述
我的测试类中有一堆测试用例:
[TestFixture]
class MyTestClass
{
[Test]
public void Test1() { ... }
[Test(Category = "MyCategory")]
public void Test2() { ... }
}
我现在想要实现的是只运行没有使用 nunit-console
设置类别的测试。所以在我的例子中,只有 Test1
应该运行。
nunit3-console.exe MyAssembly.dll where "cat == null"
我也尝试了 "cat == ''"
,结果相同。
然而,这不会给我任何测试。当然,我可以在这个人为的示例中使用 "cat != 'MyCategory'"
,但是由于我有很多类别,我不想排除所有类别,而是只选择那些没有任何类别的类别。
解决方法
查看 source 中的 Match 方法表明:缺少的类别将被评估为 false。
所以条件必须包含否定。正如您已经观察到的,"cat != 'MyCategory'"
将包括没有类别的测试,但将包括类别不是“MyCategory”的测试。
要排除任何类别的所有测试,您可以使用!~
运算符(正则表达式不匹配),例如
where "cat !~ '.+'"