此配置来自何处

本文关键字:何处 配置 | 更新日期: 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
  • 使用自定义配置文件(不是默认配置文件)
默认情况下,MSTest以隔离模式运行测试。

这个问题的解决方案是添加一个新的测试项目并将测试转移到其中

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

我把这归结为一个怪癖。