我有以下设置:
业务逻辑库执行所有数据库访问。它通过访问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中调用时,我需要做什么才能使业务逻辑类库成功检索单元测试类库设置?
答案 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;