使用NUnit控制台运行程序在一个文件夹下运行所有测试

本文关键字:运行 文件夹 一个 测试 控制台 NUnit 程序 使用 | 更新日期: 2023-09-27 18:27:31

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

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

不幸的是,Nunit只是在路径中抛出了一个System.ArgumentException:非法字符。

我能做到这一点吗?

使用NUnit控制台运行程序在一个文件夹下运行所有测试

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

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

上一个答案中的命令在单独的nunit进程中同步运行每个测试程序集。呈现在此处的命令在单个nunit实例中运行所有测试程序集,这允许利用引擎内置的并行测试运行。

备注

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

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

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

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

来自官方文件:

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

NUnit项目文件(.nuit)

Visual Studio解决方案(.sln)

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

更新

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

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)。

尝试:

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

对one_mile_run的答案进行了一点调整,以修复导致错误的问题:

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

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

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