我有一个使用SpecFlow、NUnit和Coypu在web应用程序上进行验收测试的项目。我已经在一个构建服务器上通过Jenkins获得了项目构建OK。Jenkins调用一个psake脚本,该脚本在specs项目上运行msbuild,然后调用nunit-控制台来运行规范/测试,然后我想从SpecFlow生成一个报告。
Framework "4.0"
task Default -depends RunSpecs
task BuildSpecs {
$env:EnableNuGetPackageRestore = "true"
msbuild /t:Rebuild ReturnsPortal.Specs.csproj
}
task RunSpecs -depends BuildSpecs {
exec { & "C:\path\to\NUnit 2.5.9\bin\net-2.0\nunit-console-x86.exe" /labels /out=TestResult.txt /xml=TestResult.xml .\bin\Debug\TheWebApp.Specs.dll }
exec { & "C:\path\to\SpecFlow\1.8.1\specflow.exe" nunitexecutionreport TheWebApp.Specs.csproj /out:SpecResult.html }
}但是,最后一次对specflow.exe的exec调用失败了,原因如下:
元素下面的元素是不可识别的。C:\程序文件(x86)\Jenkins\jobs\TheWebApp\workspace\Web\Sites\TheWebApp.nuget\nuget.targets
一些谷歌提示,这可能是使用msbuild版本(例如这里、这里)的一个问题。但是我的psake脚本中有Framework "4.0",而Specs项目的目标是.NET Framework4.0,它在构建步骤中构建得很好,所以我不知道为什么specflow似乎在使用早期版本的msbuild。或者也许是别的地方出了问题?
发布于 2012-07-11 10:44:41
这是我的答案,来自SpecFlow维基
对于.NET 4.0项目很重要:因为specflow.exe是为.NET 3.5编译的,所以默认情况下它不能加载.NET 4.0程序集。要为.NET 4.0项目生成此报表,必须使用配置文件强制specflow.exe使用.NET 4.0运行时。只需复制下面的配置并创建一个specflow.exe.config文件,并将其放在specflow.exe旁边,您就可以创建步骤定义报告了。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
</configuration> 发布于 2013-01-10 22:28:10
我尝试使用上面建议的配置文件解决方案。它适用于本地测试,但当我将代码推到我们的CI环境中时,它就窒息了,因为CI环境没有那个配置文件。我们将CI环境限制为只使用各种包的干净版本,因此我们不想尝试将特殊配置注入CI服务器。
我们注意到,在没有特殊配置文件的情况下,SpecFlow可以很好地处理我们的几个.NET 4.0项目。经过一些研究,实际的“问题”似乎是NuGet 2.1。对于使用.NET 1.7的NuGet 4.0项目,一切都很好。
在1.7-2.1之间的某个地方,NuGet在NuGet.targets文件中引入了新特性,这些特性不受旧版本的MSBuild的支持。具体来说,问题似乎是元素<UsingTask>下面的<UsingTask>,正如错误消息所解释的那样。
粗略地浏览一下目标文件,就会发现该部分负责保持NuGet的最新信息。删除本节完全以上面添加配置文件的方式解决了这个问题,尽管也删除了似乎提供的自更新功能。考虑到.targets文件已提交到存储库,此解决方案也适用于我们的CI环境,而不需要在CI方面进行任何更改。
这不一定是一个比ngm更好的解决方案,它只是一个不同的解决方案。取决于您的环境,这可能是一种更好的方法,也可能不是。
https://stackoverflow.com/questions/11363202
复制相似问题