从控制台运行参数化测试

时间:2017-07-18 17:20:35

标签: c# unit-testing testcase nunit-3.0 nunit-console

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

nunit console version 3.4.1

代码示例:

[TestCategory("SmokeTests")]
[TestCase("1 param", "2 param", "3 param")]
[TestCase("aaa", "bbb", "ccc")]
public void TestMethod(string a, string b)
{ //do smth }

要运行的命令行:

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

目前nunit返回错误

Unexpected token '(' at position 50 in selection expression.

请澄清,如果有可能在当前版本的nunit或其他任何内容中发布。

1 个答案:

答案 0 :(得分:1)

你已经非常接近答案了。

您的查询是

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

查询有三处错误:

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

  2. 绕过

    <块引用>

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

    您还必须将 \\\" 参数用引号括起来(这些引号只需转义一次)。

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

    name

    不是

    TestMethod("aaa","bbb","ccc")
    

那么应该起作用的查询是:

TestMethod("aaa", "bbb", "ccc")

传入 --where "cat==SmokeTests and name==\"TestMethod(\\\"aaa\\\",\\\"bbb\\\",\\\"ccc\\\")\"" 的参数是:

  • nunit3-console.exe
  • --where

然后 NUnit 可以解析 cat==SmokeTests and name=="TestMethod(\"aaa\",\"bbb\",\"ccc\")" 参数,处理转义引号,并运行您想要的测试。

参考:Test Selection Language 中的 NUnit documentation