14

传统上,nunit-console.exe已包含在存储库和构建服务器(或任何其他机器)上,此 EXE 是从某个构建脚本调用的。

现在NUnit.Runners 包可用,我想知道如何从 psake 构建脚本中使用它。它是一个解决方案级别的包,所以它不会留下任何痕迹,packages.config也不能像其他项目级别的包一样自动恢复,所以我想需要Install-Package从 psake 脚本调用,等待下载然后执行单元测试?希望此下载只能运行一次,并且每次运行时都不会减慢构建速度。还是会?

4

3 回答 3

8

我自己也遇到了这个。很容易修复如下:

  1. 获取最新版本的 Nuget 包管理器扩展。我现在1.8。
  2. 将 Nunit.Runners 包添加到您的解决方案中
  3. 将 .nuget 文件夹下 packages.config 中与 runner 相关的元素复制到单元测试项目的 packages.config 文件中

从现在开始,当你构建时,如果 Nunit.Runners 包不在机器上,Nuget 将拉下它。然后,我从命令行构建中的包中引用 Nunit 运行器。

在 Github 上为 TeamCity 构建灯做的一个小项目中有这个工作。单元测试项目中的 Packages.config 已如上所述进行了修改。您可以查看 MSBuild 文件以了解我如何从命令行运行测试。(build.proj,它引用了存储库的 tools\msbuild 文件夹中包含的一些目标和属性)。在尝试在 VS.NET 中或从命令行 (clicktobuild.bat) 构建之前,您需要安装最新的 Nuget 包管理器。

您应该能够很容易地将如何从正确的位置运行 Nunit 控制台的想法移植到 psake 中。

于 2012-05-26T17:47:33.717 回答
2

我已经向 nuget 开发人员提出了一个问题,并提出了修复建议。

使用以下更改修改 nuget.targets 文件:

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">添加此元素:

<SolutionLevelPackagesConfig>$([System.IO.Path]::Combine($(SolutionDir), ".nuget\packages.config"))</SolutionLevelPackagesConfig>

<PropertyGroup>添加此元素:

<RestoreSolutionLevelCommand>$(NuGetCommand) install "$(SolutionLevelPackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -solutionDir "$(SolutionDir) "</RestoreSolutionLevelCommand>

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">WinNT 的 RestoreCommand 之前添加此元素:

<Exec Command="$(RestoreSolutionLevelCommand)"
              LogStandardErrorAsError="true"
              Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)') And Exists('$(SolutionLevelPackagesConfig)')" />

这使我的 msbuild 恢复了解决方案级别的包。

于 2012-10-19T16:46:06.243 回答
0

这不能回答您的问题,但可能对面临类似问题的人有用。我在尝试设置 TeamCity 构建时遇到了同样的问题。我通过恢复到旧版本的 nunit 来解决这个问题。

NUnit 2.5.10.11092 在 nuget 包中仍然有 nunit exe。

于 2012-03-20T18:20:10.877 回答