Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用moq在Web.conf中模拟设置_C#_Asp.net Mvc 3_Unit Testing_Moq - Fatal编程技术网

C# 使用moq在Web.conf中模拟设置

C# 使用moq在Web.conf中模拟设置,c#,asp.net-mvc-3,unit-testing,moq,C#,Asp.net Mvc 3,Unit Testing,Moq,我正在MVC3应用程序中使用VisualStudio.TestTools进行单元测试。文件/Web.conf包含一个自定义配置,其值为“false”我无法通过ConfigurationManager.AppSettings[“disablecheckbox”]进入控制器: 这在生产测试中效果很好,但在单元测试中效果不佳。该值为“null”: 如何使用框架Moq模拟/Web.conf中的设置?如果您将配置文件读取抽象化,并将此抽象注入到类中,而不是直接使用ConfigurationManage

我正在MVC3应用程序中使用
VisualStudio.TestTools
进行单元测试。文件
/Web.conf
包含一个自定义配置,其值
为“false”
我无法通过
ConfigurationManager.AppSettings[“disablecheckbox”]进入控制器

这在生产测试中效果很好,但在单元测试中效果不佳。该值为
“null”


如何使用框架Moq模拟
/Web.conf
中的设置?

如果您将配置文件读取抽象化,并将此抽象注入到类中,而不是直接使用
ConfigurationManager
,则会更好。然后,对于您的测试,您可以模拟抽象

创建
IConfigurationReader
界面:

public interface IConfigurationReader
{
   string GetConfigSetting(string settingName);
}
真正的实现将使用
ConfigurationManager
,但对于测试,您可以模拟
IConfigurationReader


这似乎有些过分,但这是一次性的工作,可以在应用程序中重用。附加的好处是,如果有一天您决定从其他地方读取配置设置,您只需更改实现,而不必接触您的消费者。

您可能需要将这些配置设置复制到测试项目的配置文件中。测试项目将无法访问网站的
web.config
。感谢您的回答,但这并不能解决问题-相同的行为:null。这绝对不会过火。我刚刚花了几个小时来处理不同的配置文件,最后决定对配置进行抽象。