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

ili*_*ian 70 .net asp.net unit-testing

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

我希望能够使用

[DeploymentItem("web.config")]
Run Code Online (Sandbox Code Playgroud)

为了获得Web配置文件,这仍然留给我空引用异常(这是我写下一个测试的).

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

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

谢谢

Ger*_*nck 99

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

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

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

  • 我已经尝试了您的建议,我在测试项目中添加了一个新的配置文件。连接字符串到位,但是在运行测试时,我总是在一行上看到null var sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings [“ SqlServer”]。ConnectionString); 我可能会缺少什么? (2认同)

Ton*_*ony 12

您可以使用任何位置从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;
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是如何使用该类.

IAppSettings AppSettings = new AppSettingsFromFile(@"c:\my-web-app-location\web.confg");
string connectionString = AppSettings["ConnectionString"];
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 7

将web.config文件复制到"/ bin"文件夹并将其重命名为"AppName.dll.config".

其中"AppName" - 是生成的程序集的名称.

我多次使用这个黑客.

  • 在大多数情况下,添加一个简单的app.config就像在接受的答案中一样.这是一些奇怪的配置(如TestDriven中的"ad-hoc测试") (2认同)
  • 它适用于测试项目的 .proj 文件中的以下设置: &lt;ItemGroup&gt; &lt;None Include="..\MyProject\Web.config"&gt; &lt;Link&gt;$(TargetFileName).config&lt;/Link&gt; &lt;CopyToOutputDirectory&gt; PreserveNewest&lt;/CopyToOutputDirectory&gt; &lt;/None&gt; &lt;/ItemGroup&gt; 谢谢 (2认同)