C# 如何在web.config中测试自定义配置部分?

C# 如何在web.config中测试自定义配置部分?,c#,.net,asp.net-mvc-4,asp.net-web-api,C#,.net,Asp.net Mvc 4,Asp.net Web Api,我的MVC Web API应用程序有一个自定义配置部分,该部分由应用程序用于配置值 我想测试web.config文件中填充的自定义配置节值是否正确,以及GetSection是否能够正确读取它们。有没有办法在不为nunit创建另一个具有完全相同值的配置文件的情况下对此进行测试 有没有办法在不为nunit创建另一个具有完全相同值的配置文件的情况下对此进行测试 不,没有。您需要有一个配置文件才能测试自定义节。还有什么地方比单元测试项目更好呢?这似乎是个完美的地方 例如,您的解决方案中可以有以下项目:

我的MVC Web API应用程序有一个自定义配置部分,该部分由应用程序用于配置值

我想测试web.config文件中填充的自定义配置节值是否正确,以及
GetSection
是否能够正确读取它们。有没有办法在不为nunit创建另一个具有完全相同值的配置文件的情况下对此进行测试

有没有办法在不为nunit创建另一个具有完全相同值的配置文件的情况下对此进行测试

不,没有。您需要有一个配置文件才能测试自定义节。还有什么地方比单元测试项目更好呢?这似乎是个完美的地方

例如,您的解决方案中可以有以下项目:

  • 配置(包含自定义节和元素)
  • MyApp.Configuration.Tests(包含允许测试自定义配置部分的
    app.config
    文件)
有没有办法在不为nunit创建另一个具有完全相同值的配置文件的情况下对此进行测试

是的,您可以按如下方式执行此操作:

Configuration OpenWebConfiguration(string configurationFilePath)
{
    var configurationFileInfo = new FileInfo(configurationFilePath);
    var vdm = new VirtualDirectoryMapping(configurationFileInfo.DirectoryName, true, configurationFileInfo.Name);
    var wcfm = new WebConfigurationFileMap();
    wcfm.VirtualDirectories.Add("/", vdm);
    return WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
}

...
var c = OpenWebConfiguration(pathToWebConfigFile);
var section = c.GetSection(sectionName);
... etc ...

除了接受的答案之外,如果您正在寻找一个关于如何避免向测试项目中添加单独的配置文件,然后将主配置文件与测试文件同步的答案,这描述了一种将原始app/web.config添加为测试项目中的链接的简洁方法。实际上,您需要处理一个配置文件。 讨论了使用
还有ExeConfigurationFileMap(您可以使用等效的配置)

问题是我想测试web.config本身,我不想每次更改时都更新测试配置文件