单元测试asp .net应用程序时如何使用web.config

时间:2009-02-05 14:57:34

标签: .net asp.net unit-testing

我开始使用单元测试,我有一个方法,它使用web.config作为连接字符串。

我希望能够使用

[DeploymentItem("web.config")]

获取Web配置文件,这仍然留给我空引用异常(这是我写下一个测试的内容)。

如何使用我要测试的项目中包含的配置文件?

我正在使用VS 2008中包含的测试框架,如果这有任何区别的话。

由于

6 个答案:

答案 0 :(得分:97)

单元测试项目应该有自己的配置文件。

在测试项目中,您可以选择Add,New Item,Application Configuration File。

此文件的行为与web.config完全相同,但随后用于单元测试。

答案 1 :(得分:11)

您可以使用OpenMappedExeConfiguration从任意位置加载web.config或app.config。确保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"];

答案 2 :(得分:7)

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

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

我多次使用过这个黑客。

答案 3 :(得分:4)

您希望您的结果具有良好的定义和可重复性。为此,您需要对已知数据进行处理,以便您可以清楚地定义正常情况和边界情况。在我的工作中,这是始终特定的服务器和数据集,因此单元测试模块具有内置的连接字符串。其他人更喜欢使用单元测试项目中的连接字符串。我从未见过有人推荐使用网站的配置文件! (发展或其他)

答案 4 :(得分:2)

我建议抽象配置读取部分,以便可以模拟它。这样的话,请参阅Jon_Lindeheim的回复How to read Web.Config file while Unit Test Case Debugging?

答案 5 :(得分:1)

如果需要连接字符串,则不要编写单元测试(假设您使用连接字符串进入数据库)。单元测试不应该与外部环境相互作用。您需要在每次登记后运行所有这些程序,以便它们以光速运行。

对于单元测试,您需要将代码与数据库隔离。修改您的测试(以及必要时测试的代码),这样您就不需要去数据库进行测试了。