从类库中访问App.Config设置通过单元测试项目调用

时间:2009-08-23 12:10:47

标签: c# asp.net configuration nunit app-config

我有以下设置:

  • ASP.net 3.5网站项目
  • 具有业务逻辑的C#类库
  • 用于单元测试的C#类库

业务逻辑库执行所有数据库访问。它通过访问System.Configuration.ConfigurationManager.ConnectionStrings从Web站点的web.config文件获取连接字符串。当网站调用库时,这可以正常工作,因为库会查找调用者的配置。

我希望能够通过单元测试类库测试我的业务逻辑。我在测试类库的根目录中放了一个App.config文件。根据我的阅读,当测试库调用属于业务逻辑库的数据访问过程时,应该访问和使用测试库的App.config文件中的连接设置。但是,当我尝试运行单元测试时,我收到错误,表明测试库的App.config文件(和/或其内容)未被成功访问。

我对配置属性的检索(来自业务逻辑库)如下所示:

public SqlConnection MainConnection {
  get {
    string conn = "";
    try {
      conn = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ConnectionString;
    } catch {
      // might be calling from test project. Need to reference app settings
      conn = System.Configuration.ConfigurationManager.AppSettings["connString"];
    }
    return new SqlConnection(conn);
  }
}

当从网站项目中调用它时,它可以工作。在单元测试中,conn变量永远不会设置为任何东西(我也尝试过使用System.Configuration.ConfigurationSettings.AppSettings,而不是使用相同的结果)。当从NUnit GUI中调用时,我需要做什么才能使业务逻辑类库成功检索单元测试类库设置?

4 个答案:

答案 0 :(得分:7)

我刚刚找到了解决方案here。通过NUnit GUI运行我的测试时,现在正在正确使用App.config。

显然,如果您正在使用NUnit GUI并通过项目>添加程序集;添加程序集,它不会访问app.config。但是,如果通过将dll从Windows资源管理器拖到NUnit GUI中将程序集添加到NUnit项目,那么它将访问app.config。

或者,您可以通过GUI添加程序集,然后进入NUnit GUI>项目>编辑,并将配置文件名设置为配置文件的名称(VS将其设置为name.of.your.dll.config)并将Project Base设置为项目的\ bin \ Debug目录(这些是拖动装配时手动添加后在后台执行的额外步骤。

答案 1 :(得分:6)

我建议更改设计,使您的业务逻辑层(而非负责定位配置设置)注入

您的Web应用程序可以注入从Web.config文件中读取的设置,而您的单元测试可能会注入不同的设置(例如,连接字符串到测试数据库等)

答案 2 :(得分:3)

只需将app.config重命名为name.of.your.dll.config即可。它对我有用。

答案 3 :(得分:0)

尝试WebConfigurationManager.OpenWebConfiguration()方法

Configuration config = WebConfigurationManager.OpenWebConfiguration(@"x:\path\web.config");
            KeyValueConfigurationCollection appSettings = config.AppSettings.Settings;
            string connString = appSettings["connString"].Value;