我正在帮助一个因测试失败而导致构建失败的团队。
失败是由缺少连接字符串配置引起的。我检查了配置文件的常见问题,以确保使用正确的名称指定连接字符串。
最后,我获得了配置文件的完整路径,以检查构建服务器上的那个包含预期的确切配置。
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>
答案 0 :(得分:0)
我认为可以公平地说,您希望测试运行器让测试项目使用自己的配置文件,这是正常情况下发生的事情
使用NUnit,xUnit等时完全正确的假设,但不适用于Microsoft Test Runners(MSTest和VSTest)。他们只是忽略目标程序集配置文件并使用自己的配置。
这个问题有两个解决方案:
答案 1 :(得分:0)
默认情况下,MSTest在隔离模式下运行测试。
此问题的解决方案是添加一个新的测试项目并将测试移入其中。
新项目的行为与所有其他项目类似,在一个独立的进程中运行测试并使用测试项目中的app.config文件。
我把这归结为怪癖。