从控制台运行参数化测试

Yur*_*kov 5 c# unit-testing nunit-console testcase nunit-3.0

我想只使用测试用例中的一组参数运行测试方法。

我正在使用 NUnit 控制台 3.4.1。

代码示例:

[Category("SmokeTests")]
[TestCase("1 param", "2 param", "3 param")]
[TestCase("aaa", "bbb", "ccc")]
public void TestMethod(string a, string b, string c)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

要运行的命令行:

nunit3-console.exe UiTests.dll --where "cat==SmokeTests and name==TestMethod(\"aaa\", \"bbb\", \"ccc\")" --result C:\temp\result.xml
Run Code Online (Sandbox Code Playgroud)

当前 NUnit 返回错误

选择表达式中位置 50 处出现意外标记“(”。

Wai*_*Lee 2

你已经非常接近答案了。

您的查询是

--where "cat==SmokeTests and name==TestMethod(\"aaa\", \"bbb\", \"ccc\")"
Run Code Online (Sandbox Code Playgroud)

该查询存在三个问题:

  1. 您认为引号需要用反斜杠 ( \") 转义是正确的,但由于参数的解释方式,反斜杠本身也需要转义 ( \\\")。

  2. 为了绕过

    选择表达式中位置 50 处出现意外标记“(”。

    您还必须将name参数括在引号中(这些引号只需转义一次)。

  3. 当 NUnit 构造方法名称时,它用逗号分隔参数,但不带空格。您尝试在示例中运行的测试的名称是

    TestMethod("aaa","bbb","ccc")
    
    Run Code Online (Sandbox Code Playgroud)

    不是

    TestMethod("aaa", "bbb", "ccc")
    
    Run Code Online (Sandbox Code Playgroud)

那么应该有效的查询是:

--where "cat==SmokeTests and name==\"TestMethod(\\\"aaa\\\",\\\"bbb\\\",\\\"ccc\\\")\""
Run Code Online (Sandbox Code Playgroud)

传入的参数nunit3-console.exe是:

  • --where
  • cat==SmokeTests and name=="TestMethod(\"aaa\",\"bbb\",\"ccc\")"

然后 NUnit 可以解析name参数,处理转义的引号,并运行您想要的测试。

参考:NUnit 文档中的测试选择语言