2012-02-28 65 views
14

传统上,nunit-console.exe已包含在存储库和构建服务器(或任何其他机器)上,这个EXE是从一些构建脚本调用的。如何使用NUnit.Runners包和psake执行NUnit测试?

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

+0

所以据我理解正确的话,你需要检查是否安装了亚军,如果不是,它运行的NuGet并安装软件包,一个任务是什么? – stej 2012-03-02 13:44:15

+1

是的,类似的东西。 (理想情况下,解决方案级别的软件包应该具有内置的自动恢复功能,我应该简单地在'packages'文件夹内的某处调用nunit-console.exe,但这可能只会在未来版本的NuGet中出现。) – Borek 2012-03-02 14:09:37

+0

根本不知道解决方案级别的软件包存在。你如何认同他们? VS如何跟踪NUnit.Runners已经安装? – springy76 2012-03-19 15:54:45

回答

0

这并不回答你的问题,但可能对面临类似问题的人有用。我遇到了同样的问题,试图建立一个TeamCity构建。我通过恢复到旧版本的nunit来解决这个问题。

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

8

刚刚碰到这个自己。很容易修复如下:

  1. 获取最新版本的Nuget Package Manager扩展。我目前在1.8。
  2. 的Nunit.Runners包添加到您的解决方案
  3. 复制你的.nuget文件夹下从packages.config相关亚军到您的单元测试项目的packages.config文件

从现在的元素在构建时,如果Nuun.Runners包不在机​​器上,它会将其拉下。然后我在我的命令行版本中引用包中的Nunit亚军。

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

您应该能够将如何将Nunit控制台从正确的位置运行到psake的想法。

+1

“在Github上构建灯光”的链接已损坏404 :(工作链接https://github.com/SouthsideSoftware/BuildLight – roundcrisis 2013-01-02 16:14:35

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">增加这个要素RestoreNTmand for WinNT之前:

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

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