如何在单元测试时将配置文件复制到测试结果目录中?

Wil*_*ler 4 .net testing configuration unit-testing testrunconfig

我写了一些单元测试,这取决于配置文件.这file.config将部署到bin\Debug我的测试项目的目录中.但是,它似乎没有被复制到测试实际发生的输出测试结果目录中.

我搜索并发现了这些:
TFS UnitTesting在构建服务器测试项目和配置文件时没有部署本地副本程序集来测试目录

第一个链接让我了解如何将配置文件部署到我的测试项目bin\Debug目录中.

第二个提出了一个可行的解决方案,虽然我发现它对我的需求有点过分,更不用说我自己添加了一个类来测试等等.所以,我更喜欢一种更简单的方法,它可以让我拥有这个配置文件自动复制到我的测试结果目录中.

编辑#1

我正在使用:

  1. Microsoft Enterprise Library 4.1及其命名连接; 同
  2. Microsoft Visual Studio 2008; 和
  3. Microsoft UnitTest Framework.

我的配置文件如下所示:

<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <dataConfiguration defaultDatabase="Tests" />
  <connectionStrings>
    <add name="Tests" connectionString="Database=Tests;Server=(local)\SQLEXPRESS;Integrated Security=SSPI"
        providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

并命名为:Tests.config.

现在,我的项目设置包含一个DefaultSource参数,该参数包含默认的源名称,即为其创建连接和数据库对象的参数.此设置的值为Tests.

所以,当我创建一个新连接时,我只是这样做:

public static IDbConnection CreateConnection(string source) {
    return new DatabaseProviderFactory(new FileConfigurationSource(
            string.Format("{0}\{1}.config", AppDomain.CurrentDomain.BaseDirectory, source)
        ).CreateDefault().CreateConnection();
}
Run Code Online (Sandbox Code Playgroud)

现在,由于AppDomain.CurrentDomain.Basedirectory返回的值,在单元测试时这是不能正常工作的.由于此属性不会返回程序集构建目录bin\Debug,而是返回TestResults[auto-generated-test-results-directory]测试实际运行的位置.

所以,在我的测试中,我做:

[TestMethod()]
public void Connection_InitializationWithSourceName() {
    using connection as IConnection = ConnectionProviderFactory.CreateConnection(DefaultSource) {
        // Asserts here... 
    } 
}
Run Code Online (Sandbox Code Playgroud)

其中DefaultSourceproperty将返回我的默认源设置参数,该值为Tests.因此,如前所述,FileConfigurationSource对象类将搜索Tests.config测试实际运行的测试结果目录中调用的文件.

知道怎么做吗?

谢谢!=)

Doc*_*own 5

为什么不直接向项目添加postbuild事件,将文件复制到你喜欢的任何地方?