unit testing一个asp.net应用程序时如何使用web.config

我开始与unit testing,我有一个方法,使用web.config连接string。

我希望能够使用

[DeploymentItem("web.config")] 

得到networkingconfiguration文件,这仍然留下空引用exception(这是我写我的下一个testing)。

如何使用我正在testing的项目中包含的configuration文件?

我正在使用VS 2008中包含的testing框架,如果这有什么区别的话。

谢谢

unit testing项目应该有自己的configuration文件。

在testing项目上,您可以select添加,新build项目,应用程序configuration文件。

这个文件的行为与web.config完全相同,但是对于你的unit testing。

您可以使用OpenMappedExeConfiguration从任何位置加载web.config或app.config。

 ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap() fileMap.ExeConfigFilename = @"c:\my-web-app-location\web.config" Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); string connectionString = config.AppSettings.Settings["ConnectionString"].Value; 

这是web.config,很标准。

 <?xml version="1.0"?> <configuration> <configSections> </configSections> <appSettings> <add key="ConnectionString" value="Data Source=XXXX;Initial Catalog=XXX; Trusted_Connection=True;"/> </appSettings> </configuration> 

2017年09月29日更新

我已经想出了一个类,以便从文件中读取AppSetitng。 我从Zp Bappi那里得到了这个想法。

 public interface IAppSettings { string this[string key] { get; } } public class AppSettingsFromFile : IAppSettings { readonly Configuration Config; public AppSettingsFromFile(string path) { var fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = path; Config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); } public string this[string key] { get { return Config.AppSettings.Settings[key].Value; } } } 

这是如何使用这个类。

 var AppSettings = new AppSettingsFromFile(@"c:\my-web-app-location\web.confg"); string connectionString = AppSettings["ConnectionString"]; 

将您的web.config文件复制到“/ bin”文件夹中,并将其重命名为“AppName.dll.config”。

其中“AppName” – 是生成的程序集的名称。

我多次使用这个黑客。

你会希望你的结果是明确的和可重复的。 为此,您需要对已知数据进行处理,以便您可以清楚地定义正常情况和边界情况。 在我的工作中,这始终是一个特定的服务器和数据集,因此unit testing模块具有内置的连接string。其他人更喜欢使用unit testing项目中的连接string。 我从来没有见过任何人推荐使用该网站的configuration文件! (发展或其他)

我会build议抽象configuration阅读部分,以便它可以被嘲笑。 像这样,请参阅Jon_Lindeheim的答复如何阅读Web.Config文件,而unit testing用例debugging?

如果你需要一个连接string,你不写一个unit testing(假设你正在使用连接string去数据库)。 unit testing不应该与外部环境交互。 你会希望在每次办理登机手续后都运行它们,这样他们可以更好地以光速运行。

对于unit testing,您将希望从数据库中隔离代码。 修改你的testing(和你正在testing的代码,如果有必要),这样你就不需要去数据库进行testing。