传统上,nunit-console.exe
已包含在存储库和构建服务器(或任何其他计算机)上,这个EXE是从某个构建脚本调用的。
既然NUnit.Runners package可用,我想知道如何在psake构建脚本中使用它。它是一个解决方案级别的包,所以它不会在packages.config
中留下任何痕迹,也不能像其他项目级别的包那样自动恢复,所以我想需要从psake脚本中调用Install-Package
,等待下载然后执行单元测试?希望这个下载只能运行一次,并且每次运行时都不会减慢构建速度。或者会吗?
答案 0 :(得分:8)
我自己也碰到了这个。很容易解决如下:
从现在开始,当你构建时,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。