【问题标题】:Where Is This Configuration Coming From?这个配置是从哪里来的?
【发布时间】:2014-10-23 09:20:01
【问题描述】:

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

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

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

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;集成 Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户 实例=真。中止测试执行。

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

所以最大的问题是:

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

【问题讨论】:

  • 只是猜测可能是在注册表中定义的
  • 也许它来自 machine.config 文件? - %windir%\Microsoft.NET\Framework\[version]\config\machine.config%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 用于 64 位
  • @petelids - 恰到好处。它之所以使用它是因为vstest.executionengine.x86.exe.Config 中没有连接字符串 - 那么到底为什么它使用vstest.executionengine.x86.exe.Config 而不是测试项目的 app.config 呢?
  • @SteveFenton - 我不太确定说实话但是 this SO question may help?请注意问题中的 EDIT/RESOLUTION。

标签: c# continuous-integration integration-testing


【解决方案1】:

我认为可以公平地说,您希望测试运行程序让测试项目使用自己的配置文件,这通常会发生

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

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

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

【讨论】:

  • 我的印象是您必须显式传递一个标志才能使测试在与 MSTest 相同的进程下运行,否则默认情况下它会单独运行它们:/noisolation: Run tests within the MSTest.exe process. This choice improves test run speed but increases risk to the MSTest.exe process.msdn.microsoft.com/en-us/library/ms182489.aspx
  • 是的,但它会启动新进程,该进程将使用自己的配置文件。
【解决方案2】:

MSTest 默认以隔离模式运行测试。

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

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

我把这归结为一个怪癖。

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 2019-11-18
    • 2018-09-25
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多