测试项目中的App.config

时间:2011-04-15 09:09:23

标签: .net asp.net tdd .net-assembly

我正在VS2010中构建一个ASP.NET应用程序。我有许多单独的程序集(类库)和相应的Test项目。

在其中一个类库中,我使用App.config文件来存储设置。程序集本身使用以下代码来检索设置:

 string tmp = ConfigurationManager.AppSettings["mySetting"];

问题在于,当我尝试在单独的测试项目中创建单元测试时,测试不会获取App.config文件中的设置。如果我将App.config文件复制到Test项目中,它就可以工作。

如何确保每个程序集都使用自己的App.config文件副本。如果我不得不复制配置文件,它会引入问题。还有一个问题,因为可能有多个配置文件,每个程序集一个 - 无论如何它们如何在一个测试项目中共存?

谢谢!

3 个答案:

答案 0 :(得分:53)

好吧,如果您需要在多个项目中共享 App.config 文件,我只需在每个项目中“添加为链接”原始 App.config 文件。

假设您使用原始 App.config ProjectA 。然后你有 ProjectATest1 ProjectATest2 。在每个 TestX 项目中:

  1. 右键单击Visual Studio中的解决方案名称
  2. 选择“添加现有项目”
  3. 导航至 ProjectA App.config 并选择
  4. 点击“添加”按钮向下箭头
  5. 选择“添加为链接”
  6. 它将在每个 TestX 项目中创建 App.config 快捷方式。如果你改变它,它会随处变化。

    希望这有帮助。

答案 1 :(得分:6)

首先,如果您正在进行单元测试,那么您可能希望看一下模拟配置,而不是阅读它。

如果你真的想让配置可用(我以前为集成测试做过),那么你可以为你的程序集添加一个构建后的步骤(我假设1-1的程序集映射测试组件。

构建后步骤(在测试程序集上)看起来像这样:

  copy /y  "<path to your assembly under test>.dll.config" "$(TargetDir)\$(TargetName).dll.config"

基本上,您正在复制已由visual studio为您正在测试的程序集重命名的app.config,以匹配测试程序集的预期配置名称。

答案 2 :(得分:3)

不应该有程序集的配置文件。如果这样做,每个应用程序最终将为每个dll / reference项目提供一个配置文件。

程序集从加载它们的应用程序(Windows / Web)上下文中获取配置值。

因此,如果您有WebApp,程序集将使用WebApp的web.config文件来读取配置值。同样,如果您有Windows应用程序/单元测试应用程序,库应该从app.config中读取值。

请阅读此相关问题 - C#.NET Compiling the settings.settings file from various projects in a solution into 1 config file