我从单元测试开始,我有一个使用web.config作为连接字符串的方法。
我希望能够使用
[DeploymentItem("web.config")]
要获取Web配置文件,这仍然给我留下了null引用异常(这就是我编写下一个测试的目的)。
如何使用我要测试的项目随附的配置文件?
我正在使用VS 2008中包含的测试框架,如果有什么不同的话。
谢谢
我从单元测试开始,我有一个使用web.config作为连接字符串的方法。
我希望能够使用
[DeploymentItem("web.config")]
要获取Web配置文件,这仍然给我留下了null引用异常(这就是我编写下一个测试的目的)。
如何使用我要测试的项目随附的配置文件?
我正在使用VS 2008中包含的测试框架,如果有什么不同的话。
谢谢
Answers:
单元测试项目应具有自己的配置文件。
在测试项目上,可以选择“添加”,“新项目”,“应用程序配置文件”。
该文件的行为将与web.config完全相同,但是用于单元测试。
您可以使用从任何位置加载web.config或app.config OpenMappedExeConfiguration
。确保System.Configuration
已添加到项目的参考。
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更新
我上了一堂课,使从文件中读取AppSetitngs更容易。我从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;
}
}
}
这是使用该类的方法。
IAppSettings AppSettings = new AppSettingsFromFile(@"c:\my-web-app-location\web.confg");
string connectionString = AppSettings["ConnectionString"];
将您的web.config文件复制到“ / bin”文件夹中,然后将其重命名为“ AppName.dll.config”。
其中“ AppName”-是结果程序集的名称。
我曾多次使用此技巧。
您将希望结果定义明确且可重复。为此,您需要对已知数据进行处理,以便可以清楚地定义正常情况和边界情况。在我的工作中,这始终是特定的服务器和数据集,因此单元测试模块内置了连接字符串。其他人则更喜欢在单元测试项目中使用连接字符串。我从未见过有人建议使用该网站的配置文件!(开发或其他)
我建议抽象化配置读取部分,以便对其进行模拟。这样的事情,请参见Jon_Lindeheim的回复如何在单元测试用例调试时读取Web.Config文件?
如果需要连接字符串,则无需编写单元测试(假设您正在使用连接字符串进入数据库)。单元测试不应与外部环境交互。您将希望在每次签入后都运行它们,以便它们以光速运行。
对于单元测试,您将需要将代码与数据库隔离。修改测试(以及必要时要测试的代码),以使您无需进入数据库进行测试。