2014-08-29 69 views
1

我正在帮助一个团队由于测试失败而开始失败。此配置来自哪里?

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

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

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文件(荣誉petelids)。

因此,最大的问题是:

为什么vstest.executionengine.x86.exe.Config被使用,而不是app.config(在运行时TestProject.exe.config)? (我可以猜测这是因为运行的进程是测试运行器,但我认为可以公平地说,测试运行器会让测试项目使用自己的配置文件,这是正常情况)。

+0

只是一个猜测可能是它在注册表中定义 – 2014-08-29 11:06:08

+1

也许它来自machine.config文件? - 适用于64位的'%windir%\ Microsoft.NET \ Framework \ [版本] \ config \ machine.config'或'%windir%\ Microsoft.NET \ Framework64 \ [版本] \ config \ machine.config' – petelids 2014-08-29 11:21:23

+0

@ petelids - 现货。这是因为'vstest.executionengine.x86.exe.Config'中没有连接字符串 - 那么为什么它使用'vstest.executionengine.x86.exe.Config'而不是app.config来进行测试项目? – Fenton 2014-08-29 12:45:55

回答

0

MSTest的通过运行在隔离模式测试默认。

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

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

我把这个问题归结为一个怪癖。

0

我认为这是公平地说,你所期望的测试运行,让测试项目中使用它自己的配置文件,这就是通常发生

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

有两个办法解决这个问题:

  • 变化MSTest的到的NUnit或xUnit的
  • 使用自定义配置文件(而不是默认的)
+0

我的印象是你不得不显式传递一个标志,使测试运行在与MSTest相同的进程下,否则默认运行它们:'/ noisolation:在MSTest.exe进程中运行测试。此选择可以提高测试运行速度,但会增加MSTest.exe进程的风险。http://msdn.microsoft.com/en-us/library/ms182489.aspx – Fenton 2014-08-29 14:29:51

+0

是的,但它会启动将使用自己的配置的新进程文件。 – Novakov 2014-08-29 14:36:08