0

VSTest 是 TFS 2015 用于单元测试的工具,它希望默认忽略应用程序配置/设置 (app.config)。VSTest 采用可选的“运行设置”配置文件,但它不包含有关app.config文件的任何信息。现在,从runsettings文件中,您可以告诉它进入“传统”模式:

<RunSettings>
  <MSTest>
    <ForcedLegacyMode>true</ForcedLegacyMode> 
  </MSTest>
</RunSettings>

...这将允许它使用同一目录中的app.config文件(这些是程序集/库,因此配置文件只是命名为“app.config”而不是“application.exe.config”)。但是,它不会找到包含的文件。例如,我有一个单独的连接字符串文件。它包含在app.config的顶部:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings configSource="connectionStrings.config" />
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>

每次我都会收到一个关于它如何找不到文件的错误:

2016-09-21T18:36:12.2439565Z ##[error]Error Message:
2016-09-21T18:36:12.2439565Z ##[error]   Test method Assembly.Project.Class threw exception: 
2016-09-21T18:36:12.2595841Z ##[error]System.Configuration.ConfigurationErrorsException: Unable to open configSource file 'connectionStrings.config'. (D:\Agents\A3\_work\464b36816\TestResults\Definition_Host 2016-09-21 14_36_09\Out\Assembly.DLL.config line 7)
2016-09-21T18:36:12.2595841Z ##[error]Stack Trace:

因为它只允许是相对的(否则,你会得到另一个错误),我尝试在前面加上“.\”(这似乎在其他情况下也可以)并引用它上面的下几级目录,但它不会找到引用的连接字符串文件。

好的。所以我想检查执行逻辑以确定工作目录是什么。启动测试的 TFS 2015 任务称为 VSTest.ps1。它的是一个名为“Invoke-PSTest”的cmdlet,以便调用“vstest.console.exe”来实际运行测试。这在磁盘上绝对不存在,因为它是自己的文件或任何 psd1/psm1 文件,因此它必须由二进制程序集提供。

但是,我显然也避免按照我应该的方式向单元测试提供数据源/连接字符串。毕竟,我必须使用“传统”模式才能让 VSTest 使用我的配置文件。

那么,为单元测试提供应用程序配置(例如连接字符串)的正确方法是什么?毕竟,有时您实际上需要外部资源才能正确测试。

4

0 回答 0