c# - 从控制台运行参数化测试

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

我想只使用测试用例中的一组参数运行测试方法。
我正在使用 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
}
要运行的命令行:
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.

最佳答案

你非常接近答案。
您的查询是

--where "cat==SmokeTests and name==TestMethod(\"aaa\", \"bbb\", \"ccc\")"
查询有以下三点错误:
  • 您认为引号需要用反斜杠转义( \" )是正确的,但由于参数的解释方式,反斜杠本身也需要转义( \\\" )。
  • 为了绕过

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


    您还必须包装 name引号中的参数(这些引号只需要转义一次)。
  • 当 NUnit 为一个方法构造它的名字时,它用逗号分隔参数,但 没有空格 .您尝试在示例中运行的测试的名称是
    TestMethod("aaa","bbb","ccc")
    
    不是
    TestMethod("aaa", "bbb", "ccc")
    

  • 那么,应该工作的查询是:
    --where "cat==SmokeTests and name==\"TestMethod(\\\"aaa\\\",\\\"bbb\\\",\\\"ccc\\\")\""
    
    传入 nunit3-console.exe 的参数然后是:
  • --where
  • cat==SmokeTests and name=="TestMethod(\"aaa\",\"bbb\",\"ccc\")"

  • 然后 NUnit 可以解析 name arugment,处理转义的引号,并运行你想要的测试。
    引用:Test Selection LanguageNUnit documentation .

    关于c# - 从控制台运行参数化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173324/

    相关文章:

    c# - 如何在azure wcf中继中处理双工wcf

    c++ - Visual Studio 2015 C++ 单元测试

    unit-testing - 在Grails中编写 super 简单测试的问题

    ios - 谷歌地图打破业务逻辑单元测试

    c# - 如何获取在特定点接收鼠标点击的 Control/Windows Handle/AutomationElement?

    c# - REST 服务中的 POST 请求为空

    c# - 模拟 IDisposable 类

    isElementInViewport 的 JavaScript 测试用例

    php - 需要帮助编写 php 测试文件来测试我的 PHP Controller 类