我面向一些面向DB的单元测试,它们从app.config文件中获取连接字符串。我通过 ConfigurationManager 类抓取字符串。
var conString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
测试在开发机器上运行正常但在TFS上运行不正常。存在空引用错误。如果我在单元测试中用一个硬编码字符串替换连接字符串 - 与app.config中的相同 - 那么测试就可以了。哦是的,我确保app.config设置为"复制到输出文件夹"。
TFS和ConfigurationManager是否存在已知问题?
POM
答案 0 :(得分:2)
我最近遇到了与TFS 2015相同的问题(在更新2的内部)。我们有多个测试项目从app.config文件访问连接字符串,但是一个特定项目无法访问导致我们的构建失败的连接字符串。
我修改了.csproj文件以匹配其他正在运行的测试项目,但这并未取得任何成功,而是以下内容对我有用:
办理登机手续后,项目内的所有单元测试都顺利通过。
这是一个奇怪的解决方案,但它让我们的测试运行。
注意:删除App.config文件是必要的步骤。更改文件的属性(删除文件之前)没有任何区别。
在应用上述解决方案后,我注意到所有单元测试都运行了两次,经过一些调查后我发现整个问题归结为我们的构建配置: -
在我们的Visual Studio Build任务中,我们在MS Build Arguments上使用以下参数:
/p:OutDir=$(Build.StagingDirectory)
我们的Visual Studio Test任务已配置为在以下位置查找Test Assembly:
**\$(BuildConfiguration)\*test*.dll;-:**\obj\**
将测试装配位置更改为以下固定的所有内容:
$(Build.StagingDirectory)\*test*.dll;-:**\_PublishedWebsites\**
App.config文件和单元测试没有更多问题只运行一次。
答案 1 :(得分:0)
实际上,我在我的解决方案中创建了另一个测试项目并再次使用conn字符串添加了app.config,现在它也适用于TFS。我不知道原因是什么,但我会在这里留下问题,以供其他人参考和解决。谢谢。
答案 2 :(得分:0)
我的测试项目是与主项目分开的项目。因此它需要自己的App.config副本。按照上一个响应中的步骤添加新的应用程序配置文件,并为其提供与主项目中相同的内容。