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

时间:2016-01-27 10:37:16

标签: unit-testing tfs tfs2015

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

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

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

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

POM

3 个答案:

答案 0 :(得分:2)

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

我修改了.csproj文件以匹配其他正在运行的测试项目,但这并未取得任何成功,而是以下内容对我有用:

  1. 将App.config的内容复制到记事本
  2. 从项目中删除了App.config文件
  3. 向项目添加了新的应用程序配置文件(App.config)
  4. 将内容从记事本粘贴到新的App.confg文件
  5. 右键单击App.config文件并更改其属性:
    • 构建操作:内容
    • 复制到输出目录:始终复制
  6. 办理登机手续后,项目内的所有单元测试都顺利通过。

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

      

    注意:删除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副本。按照上一个响应中的步骤添加新的应用程序配置文件,并为其提供与主项目中相同的内容。