从类库中访问App.Config设置通过unit testing项目调用

我有以下设置:

  • ASP.net 3.5网站项目
  • 带有业务逻辑的C#类库
  • 用于unit testing的C#类库

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

我希望能够通过unit testing类库测试我的业务逻辑。 我在测试类库的根目录中放了一个App.config文件。 根据我的阅读,当测试库调用属于业务逻辑库的数据访问过程时,应该访问和使用测试库的App.config文件中的连接设置。 但是,当我尝试运行unit testing时,我收到错误,表明测试库的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); } } 

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

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

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

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

我建议更改设计,以便注入您的业​​务逻辑层,而不是负责定位配置设置。

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

只需将app.config重命名为name.of.your.dll.config 。 这个对我有用。

尝试使用WebConfigurationManager.OpenWebConfiguration()方法

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