我编写了一些单元测试,它们依赖于配置文件。这个
我已经搜索并找到了以下信息:
TFS UnitTesting无法在构建服务器上将本地副本程序集部署到测试目录
测试项目和配置文件 第一个链接让我找到了如何将我的配置文件部署到测试项目的
第二个链接提供了一种可行的解决方案,尽管我认为它有点过度设计,并且需要添加一个用于测试的类等等。因此,我更倾向于使用一个简单的方法,可以自动将该配置文件复制到我的测试结果目录中。
注:我正在使用Microsoft Enterprise Library 4.1 和它的命名连接、Microsoft Visual Studio 2008以及Microsoft UnitTest Framework。我的配置文件如下:
现在,在单元测试中,由于返回的
所以,当我在我的测试中执行以下操作时:
file.config
文件被部署到我的测试项目的bin\Debug
目录中。然而,在实际进行测试的输出测试结果目录中似乎没有复制该文件。我已经搜索并找到了以下信息:
TFS UnitTesting无法在构建服务器上将本地副本程序集部署到测试目录
测试项目和配置文件 第一个链接让我找到了如何将我的配置文件部署到测试项目的
bin\Debug
目录中。第二个链接提供了一种可行的解决方案,尽管我认为它有点过度设计,并且需要添加一个用于测试的类等等。因此,我更倾向于使用一个简单的方法,可以自动将该配置文件复制到我的测试结果目录中。
注:我正在使用Microsoft Enterprise Library 4.1 和它的命名连接、Microsoft Visual Studio 2008以及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>
现在,我的项目设置包含一个 DefaultSource
参数,它包含默认源名称,也就是用于创建连接和数据库对象的源。该设置的值为 Tests
。
因此,当我创建新连接时,只需要这样做:
并且命名为:Tests.config
。
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[自动生成的测试结果目录]
。所以,当我在我的测试中执行以下操作时:
[TestMethod()]
public void Connection_InitializationWithSourceName() {
using connection as IConnection = ConnectionProviderFactory.CreateConnection(DefaultSource) {
// Asserts here...
}
}
其中DefaultSource
属性将返回我的默认源设置参数,其值为Tests
。因此,FileConfigurationSource
对象类将在测试结果目录中搜索名为Tests.config
的文件,正如之前所述,在实际运行测试时。
有任何想法吗?
谢谢!=)
C:\MyProject.Tests\TestResults\[auto-generated-test-result-directory]\Out
,那么我也想这样做。问题在于[auto-generated]
部分让我感到困惑,并且无法在构建后进行复制。 - Will Marcouiller[auto-generated]
的东西是如何工作的,然后自己重建逻辑。或者你可以将配置文件复制到任何子目录中,路径类似于C:\MyProject.Tests\TestResults\*\Out
。这意味着,你需要编写一个小程序或脚本来完成复制任务(我通常会选择 VBScript 来完成这些任务,但你可以选择任何你喜欢的工具)。 - Doc Brown