我一直在搜索Google,在Stack Overflow上阅读各种问题(和答案),扫描SlowCheetah NuGet页面,GitHub问题列表和公用事业作者的博客,我仍然可以&找到答案,找出造成我问题的确切原因。
我在TFS 2013 Git存储库中托管了一个解决方案。当特定分支被推送到TFS服务器时,它会启动自动构建并部署到构建站点。所有这一切都很有效。它还启动了所有的单元测试,一切都没有问题。
也就是说,直到我进入SpecFlow WatiN测试......
测试开始没有问题,我将服务器设置为在浏览器中以交互方式运行WatiN测试。这一切都有效。问题是WatiN测试点击的网站是在Build服务器上,这是一个不同于我在我的开发盒上本地使用的URL(以及测试服务器,这是第三个URL)。我在单元测试项目的App.Config中设置了站点URL(这是一个基于MSTest的项目)。我还为每个目标环境设置了XDT转换文件,包括相关的Build环境。
当我推送到TFS或手动启动构建时,一切都运行良好,直到它进入SpecFlow测试。这些特定的测试开始,如果我实际登录到作为构建服务器的VM托管服务器,当构建和测试作为构建/测试用户运行时,我实际上可以看到浏览器启动。我还可以简单地看到"此页面无法显示" Internet Explorer中的消息,这不是预期的行为(我应该看到应用程序的登录页面),测试失败。
再看一下,我从明显开始 - 它是否击中了正确的网站?好吧,挖掘服务器上的build文件夹,我能够验证转换是否正常 - app.config文件包含开发机器的站点URL,而不是Build环境的站点URL!
Web项目的转换正在运行 - 正在为前端Web应用程序和后端服务层应用程序填充Build环境的更改并且它们可以工作 - 我可以在构建服务器上启动该站点在浏览器中。但是这些项目不使用SlowCheetah,而是使用内置的web.config转换。单元测试项目DOES安装了SlowCheetah NuGet包;它似乎无论出于何种原因都无法正常工作。
这里是相关单元测试项目的 app.config 文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
</configSections>
<appSettings>
<add key="SiteUrl" value="http://dev.server.url/" />
</appSettings>
<!-- Spec-Flow Configuration -->
<specFlow>
<unitTestProvider name="MsTest" />
</specFlow>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.5022.0" newVersion="2.0.5022.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
配置转换文件 app.Build.config 如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="SiteUrl" xdt:Locator="Match(key)" xdt:Transform="SetAttributes" value="http://build.server.url/" />
</appSettings>
</configuration>
这些配置文件对我来说看起来不错,所以我认为这些文件的格式存在问题。当我在本地开发盒上手动运行时,我还可以验证SpecFlow测试是否运行并通过。我的猜测是转换根本没有被启动,或者在运行转换和运行单元测试的时间线中可能存在某些东西。
我在这里做错了什么?非常感谢任何帮助!
答案 0 :(得分:0)
在构建定义中,您可能已定义要使用的配置。其中一部分还定义了像Any CPU或x86这样的平台。在解决方案中,平台任何CPU都有一个空间,在项目文件中,平台AnyCPU没有空间。
我发现解决此问题的最佳方法是将平台留空并仅输入配置名称。 VS会弹出一个警告,告诉您有数据缺失,您只需按“是”即可保存。或者,您只需键入以下配置,如下面的| Release,| Debug。
模式是[PlatformName] | [ConfigurationName],[PlatformName] | [ConfigurationName],...