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。