【问题标题】:Use NUnit Console Runner to run all tests under a folder使用 NUnit Console Runner 运行文件夹下的所有测试
【发布时间】:2015-12-21 12:19:51
【问题描述】:

我正在尝试使用 NUnit Runners 2.6.4 来运行我的测试文件夹中的所有测试程序集。我当前的命令如下所示:

/nologo /noshadow /framework:net-4.0 /xml:.\test\TestResults.xml .\test\*.Test.dll

不幸的是,Nunit 只是抛出一个 System.ArgumentException: Illegal characters in path。

有没有我可以做到这一点?

【问题讨论】:

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


    【解决方案1】:

    您可以使用以下 PowerShell 命令(对于 NUnit3,对于 NUnit2 更改运行器名称):

    PS> nunit3-console (ls -r *\bin\Debug\*.Tests.dll | % FullName | sort-object -Unique)
    

    来自previous answer 的命令在单独的 nunit 进程中同步运行每个测试程序集。此处介绍的命令在单个 nunit 实例中运行所有测试程序集,这允许利用引擎 built-in parallel test run

    备注

    1. 记得调整目录搜索模式。给定的示例仅运行以 .Tests.dll 结尾并在 \bin\Debug 目录内的程序集。

    2. 注意Unique 过滤 - 你可能不想拥有它。

    【讨论】:

    • 我尝试按照显示的方式运行脚本,但出现“无法将“System.String”类型的“FullName”值转换为“System.Management.Automation.ScriptBlock”类型的错误。 ....有什么建议吗?
    【解决方案2】:

    输入文件不能使用通配符,但可以在命令行中指定多个测试库:

    /nologo /noshadow /framework:net-4.0 /xml:.\test\TestResults.xml .\test\SomeLib1.Test.dll .\test\SomeLib2.Test.dll .\test\SomeLib3.Test.dll
    

    来自the official documentation

    输入文件可以是托管程序集(.dll 或 .exe),其中包含 测试或 NUnit 识别的项目文件。开箱即用, 可识别以下项目类型:

    NUnit 项目文件 (.nunit)

    Visual Studio 解决方案 (.sln)

    Visual Studio 项目(.csproj、.vbproj、.csproj)

    更新

    您可以使用批处理文件对文件夹中的所有文件运行命令:

    for /f %%f in ('dir .\test\ /b /s *.Test.dll') do nunit-console /nologo /noshadow /framework:net-4.0 /xml:.\test\TestResults.xml "%%f"
    

    dir 命令使用*.Test.dll 模板从.\test\ 文件夹中选择文件名。名称会一一传递给命令 (nunit-console)。

    【讨论】:

    • 很抱歉,我没有指定我通过 FAKE 构建脚本通过 OpenCover 运行 nunit 控制台,并且上面的命令被放入参数属性中,以便 OpenCover 注入到 nunit 控制台中。因此,我不能使用批处理脚本。最好避免指定 dll 的确切名称,因为添加新测试将导致测试脚本无法检测到它,并且没有任何错误消息。
    • 'dir /b /s .\test\ *.Test.dll'
    【解决方案3】:

    试试:

    PS> nunit3-console (ls -r *\bin\Debug\*.Tests.dll | % { $_.FullName } | sort-object -Unique)
    

    对 one_mile_run 的答案稍作调整,以解决导致错误的问题:

    无法将“System.String”类型的“FullName”值转换为“System.Management.Automation.ScriptBlock”类型

    【讨论】:

      【解决方案4】:

      我在某个文件夹中成功运行测试的一种方法是使用where 选项。 =~ 语法用于使用正则表达式(.NET 风格)来匹配命名空间。如果命名空间与每个约定的文件夹结构名称匹配,您将获得所需的结果。您会希望您的正则表达式与您所定位的顶级文件夹相匹配。

      nunit3-console.exe --where="namespace =~ ^YourBase.Namespace" yourproject.dll
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多