2010-02-24 21 views
1

这里的情况:单元测试 - 当多个项目都有自己的一套APP_CONFIG的文件

我有多个单元测试项目的解决方案,每个应用程序针对特定组件。这些单元测试项目需要一组App_Config *文件才能执行(即connectionStrings.config,appSettings.config等)。当我使用TD.NET或ReSharper在VS.NET中运行测试时,正如预期的那样,这个世界很好,但是,当我运行我的NAnt构建脚本来执行测试时,我的构建输出文件夹包含所有程序集,测试程序集等不包含任何关联的App_config *文件。

我尝试将所有的App_Config文件属性设置为“始终复制”,当我在构建解决方案时存在单个测试项目时可以正常工作,但是当多个项目都在相同的解决方案中并且全部包含相同的配置文件名称与不同的设置,世界开始分崩离析。

处理这种情况的最佳方法是什么?

感谢

+1

处理这种情况的最好方法是编写测试,以使它们完全不依赖于配置文件。 – 2010-02-24 18:13:54

+0

我同意你的标记,但不幸的是这是一个遗留应用程序,其大量的配置文件紧紧地绑定到系统 – user280541 2010-02-24 18:18:31

回答

0

手动重命名文件的app.config与特定组件的它(“assembly1.dll.config”,“assembly2.dll.config”等),伴随而来的名称相对应。在项目中自己做这件事。这将禁止Visual Studio重命名文件本身。接下来,将它们全部复制到输出目录中,并使用它们各自不同的名称。

+0

问题不在于App.config本身(它正确地重命名为assemblyname。编译时)它的相关配置文件在App_Config文件夹中导致问题,但感谢您尝试的帮助 – user280541 2010-02-24 18:19:47

0

在app.config中,使用configSource属性替代config部分本身,将引用放到单独的文件中。

<appSettings configSource="Config\AppSettings.SupportTest.config" /> 
    <ConnectionConfig configSource="Config\DatabaseConnections.config" /> 
    <log4net configSource="Config\Log4Net.config" /> 

然后,对每个不同的主机配置节的文件,并在应用程序配置为每个测试主机改变间接引用为每个测试主机的相应文件。

即在App.config为UnitTestHostA,把

<appSettings configSource="Config\AppSettings.UnitTestHostA.config" /> 
    <ConnectionConfig configSource="Config\Connections.UnitTestHostA.config" /> 
    <log4net configSource="Config\Log4Net.config" /> 

和UnitTestHostB,把

<appSettings configSource="Config\AppSettings.UnitTestHostB.config" /> 
    <ConnectionConfig configSource="Config\Connections.UnitTestHostB.config" /> 
    <log4net configSource="Config\Log4Net.config" /> 
+0

这是我们如何设置现在,但问题是,应用程序UnitTestHostA和UnitTestHostB需要相同的configSource文件,但在UnitTestHostA文件可能有一个属性设置为“A”,而在UnitTestHostB文件中,同一个属性可能设置为“B”。我不想最终重命名特定于每个测试应用程序的配置文件,因为这会在新的配置文件添加到应用程序本身时导致严重的维护噩梦。我想简单地从应用程序中取出最新版本的配置并将它们放入测试程序集中 – user280541 2010-02-24 18:30:03

0

万一有人有兴趣我是如何解决这个:

我的解决方案最接近查尔斯和戴维建议的关于重命名特定于测试程序集的配置文件,而不是重命名每个文件,我选择重命名文件夹App_通过这种方式配置为[AssemblyName] _Config,我必须做的重命名量非常有限(实际上没有其他重命名操作)。

当然,我还必须在我的主App.config文件中查找并替换所有configSource =“App_Config”到configSource =“[AssemblyName] _Config”(其中[AssemblyName]是测试组件)

相关问题