4

我已经编写了一些依赖于配置文件的单元测试。这file.config将部署到bin\Debug我的测试项目的目录中。但是,它似乎没有被复制到我实际进行测试的输出测试结果目录中。

我已经搜索并找到了这些:
TFS UnitTesting not deploying local copy assembly to test dir when on build server
Test project and config file

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

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

编辑#1

我正在使用:

  1. Microsoft Enterprise Library 4.1 及其命名连接;和
  2. 微软视觉工作室 2008;和
  3. 微软单元测试框架。

我的配置文件如下所示:

<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>

并命名为: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();
}

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... 
    } 
}

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

知道怎么做吗?

谢谢!=)

4

2 回答 2

5

为什么不向项目添加一个构建后事件,将文件复制到您喜欢的任何位置?

于 2011-03-13T15:21:24.060 回答
4

您可以将属性 [DeploymentItem] 添加到所有需要它的测试中,这会将您需要的任何文件部署到 out 文件夹。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=vs.80).aspx

它可以这样使用:

[DeploymentItem("resources/my-file.ini")]
[TestMethod()]
public void Connection_InitializationWithSourceName() {

或者,如果您在该班级的所有测试中都需要它,也可以将其放在班级上。

于 2012-01-18T13:34:47.463 回答