我已经编写了一些依赖于配置文件的单元测试。这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
我正在使用:
- Microsoft Enterprise Library 4.1 及其命名连接;和
- 微软视觉工作室 2008;和
- 微软单元测试框架。
我的配置文件如下所示:
<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
在测试实际运行的测试结果目录中调用的文件,如前所述。
知道怎么做吗?
谢谢!=)