C# 在单元测试中使用Web.config文件

C# 在单元测试中使用Web.config文件,c#,asp.net-mvc,web-config,visual-studio-2017,vs-unit-testing-framework,C#,Asp.net Mvc,Web Config,Visual Studio 2017,Vs Unit Testing Framework,我需要一点帮助来解决我遇到的问题 我创建了一个单元测试,并尝试测试一个类,该类有一个使用成员资格功能的方法。问题是成员资格使用了我的web项目文件(web.config)中的设置,如connectString和其他设置 有没有办法将我的单元测试配置为从我的Web项目的Web.config中读取规范?我正在使用VS2017 提前感谢。一个可能的解决方案(我更喜欢)是创建一个公共接口作为配置提供程序,并在类中实现它,如下所示: 注意:在一个单独的程序集中创建这个接口和类,这个程序集可以在web应用程

我需要一点帮助来解决我遇到的问题

我创建了一个单元测试,并尝试测试一个类,该类有一个使用成员资格功能的方法。问题是成员资格使用了我的web项目文件(web.config)中的设置,如connectString和其他设置

有没有办法将我的单元测试配置为从我的Web项目的Web.config中读取规范?我正在使用VS2017


提前感谢。

一个可能的解决方案(我更喜欢)是创建一个公共接口作为配置提供程序,并在类中实现它,如下所示:

注意:在一个单独的程序集中创建这个接口和类,这个程序集可以在web应用程序和单元测试项目中使用

public interface IConfigurationProvider
{
    string GetValue(string key, string valueIfNull = "");
}

using System.Configuration;
public class ConfigurationProvider : IConfigurationProvider
{
    public string GetValue(string key, string valueIfNull = "")
    {
        return (!String.IsNullOrEmpty(ConfigurationManager.AppSettings[key]) 
            ? ConfigurationManager.AppSettings[key] 
            : valueIfNull);
    }
}
在web应用程序中使用ConfigurationProvider类的实例(使用DI)。而在单元测试项目中,您需要模拟“IConfigurationProvider”类型的对象,并调用“GetValue”方法来返回特定键的首选项值


这意味着,您的web应用程序需要使用此提供程序读取配置值,而不是直接从ConfigurationManager读取,并且您的单元测试项目需要模拟该接口。

一个可能的解决方案(我更喜欢)是创建一个公共接口作为配置提供程序,并在类中实现,如下所示:

注意:在一个单独的程序集中创建这个接口和类,这个程序集可以在web应用程序和单元测试项目中使用

public interface IConfigurationProvider
{
    string GetValue(string key, string valueIfNull = "");
}

using System.Configuration;
public class ConfigurationProvider : IConfigurationProvider
{
    public string GetValue(string key, string valueIfNull = "")
    {
        return (!String.IsNullOrEmpty(ConfigurationManager.AppSettings[key]) 
            ? ConfigurationManager.AppSettings[key] 
            : valueIfNull);
    }
}
在web应用程序中使用ConfigurationProvider类的实例(使用DI)。而在单元测试项目中,您需要模拟“IConfigurationProvider”类型的对象,并调用“GetValue”方法来返回特定键的首选项值


这意味着您的web应用程序需要使用此提供程序读取配置值,而不是直接从ConfigurationManager读取,您的单元测试项目需要模拟接口。

最简单的方法是将您尝试测试的项目的web.cofig内容复制到单元测试项目的app.config中。最简单的方法是将您尝试测试的项目的web.cofig内容复制到单元测试项目的app.config中。