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

Yaa*_*lis 6 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Yaa*_*lis 7

我刚刚在这里找到了解决方案.通过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目录(这些是在程序集中拖动并在手动添加它时在后台完成的额外步骤.


azh*_*lov 6

我建议更改设计,使您的业务逻辑层注入它们,而不是负责定位配置设置.

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