此配置来自何处
本文关键字:何处 配置 | 更新日期: 2023-09-27 18:19:55
我正在帮助一个由于测试失败而导致构建开始失败的团队。
故障是由缺少连接字符串配置引起的。我检查了与配置文件有关的常见问题,以确保指定的连接字符串的名称正确无误。
最后,我获得了配置文件的完整路径,以检查构建服务器上的配置文件是否包含预期的确切配置。
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=|数据目录| aspnetdb.mdf;使用者实例=true。正在中止测试执行。
这来自machine.config
文件(kudos petelids)。
因此,最大的问题是:
为什么使用vstest.executionengine.x86.exe.Config
而不是app.config
(在运行时使用TestProject.exe.config
)?(我可以猜测这是因为运行的进程是测试运行程序,但我认为可以公平地说,你会期望测试运行程序让测试项目使用自己的配置文件,这是正常情况)。
我认为可以公平地说,您希望测试运行器让测试项目使用自己的配置文件,这就是通常会发生的情况
当使用NUnit、xUnit等时,这是完全正确的假设,但不使用Microsoft测试运行程序(MSTest和VSTest)。它们只是忽略目标程序集配置文件,并使用自己的配置。
这个问题有两种解决方案:
- 将MSTest更改为NUnit或xUnit
- 使用自定义配置文件(不是默认配置文件)
这个问题的解决方案是添加一个新的测试项目并将测试转移到其中
新项目的行为与所有其他项目类似,在一个独立的进程中运行测试,并使用测试项目中的app.config文件。
我把这归结为一个怪癖。