如何使用NUnit.Runners包和psake执行NUnit测试?

时间:2012-02-28 16:37:33

标签: build nunit nuget psake

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

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

3 个答案:

答案 0 :(得分:8)

我自己也碰到了这个。很容易解决如下:

  1. 获取Nuget Package Manager扩展的最新版本。我现在在1.8。
  2. 将Nunit.Runners包添加到您的解决方案
  3. 将与.ruget文件夹下的packages.config相关的运动员元素复制到单元测试项目的packages.config文件中
  4. 从现在开始,当你构建时,Nuget会下载Nunit.Runners包,如果它不在机器上的话。然后我在命令行build中从包中引用Nunit runner。

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

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

答案 1 :(得分:2)

我创建了一个issue with nuget developers,并提出了修复方法。

使用以下更改修改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">中,在UpdateCommand for WinNT之前添加此元素:

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

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

答案 2 :(得分:0)

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

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