单元测试中App.Config中未提供的连接字符串在TFS 2015上运行

问题描述 投票:2回答:3

我是一些面向单元测试的DB,它从app.config文件中获取连接字符串。我正在通过ConfigurationManager类抓取字符串。

var conString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;

测试在开发机器上运行良好,但在TFS上运行不正常。存在空引用错误。如果我在单元测试中用一个硬编码字符串替换连接字符串 - 与app.config中的相同 - 那么测试就可以了。哦是的,我确保app.config设置为“复制到输出文件夹”。

TFS和ConfigurationManager是否存在已知问题?

POM

unit-testing tfs tfs2015
3个回答
2
投票

我最近遇到了与TFS 2015相同的问题(在更新2的内部)。我们有多个测试项目从app.config文件访问连接字符串,但是一个特定项目无法访问导致构建失败的连接字符串。

我修改了.csproj文件以匹配其他工作测试项目,但这没有提供任何成功,而是以下工作对我有用:

  1. 将App.config的内容复制到记事本
  2. 从项目中删除了App.config文件
  3. 为项目添加了新的应用程序配置文件(App.config)
  4. 将记事本中的内容粘贴到新的App.config文件中
  5. 右键单击App.config文件并更改其属性: 构建行动:内容 复制到输出目录:始终复制

办理登机手续时,项目内的所有单元测试均成功通过。

这是一个奇怪的解决方案,但它让我们的测试运行。

注意:删除App.config文件是必要的步骤。更改文件的属性(删除文件之前)并没有什么区别。

Update:

在应用上述解决方案后,我注意到所有单元测试都运行了两次,经过一些调查后我发现整个问题归结为我们的构建配置: -

  • 在我们的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文件和单元测试没有更多问题只运行一次。


0
投票

实际上,我在我的解决方案中创建了另一个测试项目并再次使用conn字符串添加了app.config,现在它也适用于TFS。我不知道原因是什么,但我会在这里留下问题,以供其他人参考和解决。谢谢。


0
投票

我的测试项目是与主项目分开的项目。因此它需要自己的App.config副本。按照上一个响应中的步骤添加新的应用程序配置文件,并为其提供与主项目中相同的内容。

© www.soinside.com 2019 - 2024. All rights reserved.