如何在NUnit命令行执行时排除单个TestCase参数而非全部?
如何在NUnit命令行中仅排除单个TestCase参数
你遇到的问题根源在于Category属性的写法错误——你现在的写法会把整个TestReports方法标记为IgnoreForNow分类,导致所有四个测试用例都被归类进去,所以命令行过滤会排除全部。我们先修正这个问题,再给出正确的命令行用法。
方法一:给单个TestCase绑定Category(推荐)
NUnit允许给单个TestCase实例单独指定分类,不需要给整个方法加Category。修正你的测试代码:
[TestCase("A", Category = "IgnoreForNow")] // 仅这个TestCase属于IgnoreForNow分类 [TestCase("B")] [TestCase("C")] [TestCase("D")] public void TestReports(string fileName) { Test("foo", fileName); }
这样只有参数为"A"的测试用例会被标记为IgnoreForNow,其他测试用例不受影响。
然后使用你原来的命令行就可以正常工作了:
nunit3-console.exe Excel.Test.dll --where="cat!=IgnoreForNow"
这个命令会执行除了IgnoreForNow分类之外的所有测试用例,也就是跳过参数"A"的测试,保留B、C、D。
方法二:通过测试用例名称直接过滤
如果你不想修改测试代码,也可以直接通过测试用例的名称来排除。NUnit生成的测试用例名称会包含参数值,比如参数"A"的测试用例全名为Excel.Test.YourTestClass.TestReports("A")(具体名称取决于你的命名空间和类名)。
你可以用name过滤条件来排除它:
nunit3-console.exe Excel.Test.dll --where="name!=TestReports(\"A\")"
注意要转义引号,或者在PowerShell中用单引号包裹:
nunit3-console.exe Excel.Test.dll --where='name!=TestReports("A")'
这种方法不需要修改测试代码,但缺点是如果测试方法名或参数值变化,命令行也需要同步修改。
两种方法都能满足你的需求:构建系统执行命令时跳过目标测试用例,本地直接运行测试时(不添加--where参数)所有用例都会执行,不需要用Ignore属性。
内容的提问来源于stack exchange,提问作者VSanka
相关产品推荐
相关产品推荐

