这种配置来自何处?

时间:2014-08-29 11:01:32

标签: c# continuous-integration integration-testing

我正在帮助一个因测试失败而导致构建失败的团队。

失败是由缺少连接字符串配置引起的。我检查了配置文件的常见问题,以确保使用正确的名称指定连接字符串。

最后,我获得了配置文件的完整路径,以检查构建服务器上的那个包含预期的确切配置。

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

路径未指向TestProject.exe.config文件,而是指向以下位置的vstest.executionengine.x86.exe.Config

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.Config

此文件根本不包含任何连接字符串。

当我从配置中写出所有可用的连接字符串时,我得到默认的连接字符串:

  

名称:LocalSqlServer连接:数据源=。\ SQLEXPRESS;集成   安全性= SSPI; AttachDBFilename = | DataDirectory目录| ASPNETDB.MDF;用户   Instance = true。中止测试执行。

这来自machine.config文件(kudos petelids)。

所以最大的问题是:

为什么使用vstest.executionengine.x86.exe.Config而不是app.config(在运行时TestProject.exe.config)? (我可以猜测这是因为运行的进程是测试运行器,但我认为可以公平地说,您希望测试运行器让测试项目使用自己的配置文件,这通常会发生。)< / p>

2 个答案:

答案 0 :(得分:0)

  

我认为可以公平地说,您希望测试运行器让测试项目使用自己的配置文件,这是正常情况下发生的事情

使用NUnit,xUnit等时完全正确的假设,但不适用于Microsoft Test Runners(MSTest和VSTest)。他们只是忽略目标程序集配置文件并使用自己的配置。

这个问题有两个解决方案:

  • 将MSTest更改为NUnit或xUnit
  • 使用自定义配置文件(不是默认配置文件)

答案 1 :(得分:0)

默认情况下,MSTest在隔离模式下运行测试。

此问题的解决方案是添加一个新的测试项目并将测试移入其中。

新项目的行为与所有其他项目类似,在一个独立的进程中运行测试并使用测试项目中的app.config文件。

我把这归结为怪癖。