有没有一种方法可以获取基于任意xml的System.Configuration.Configuration实例?
时间:2020-03-05 18:41:45 来源:igfitidea点击:
我正在尝试对编写的自定义ConfigurationSection进行单元测试,并且希望将一些任意配置XML加载到每个测试的System.Configuration.Configuration中(而不是将测试配置xml放入Tests.dll中。配置文件,就是说,我想做这样的事情:
Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>"); MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection"); Assert.That(section != null);
但是,看来ConfigurationManager仅会为我们提供与EXE文件或者计算机配置关联的Configuration实例。有没有一种方法可以将任意XML加载到Configuration实例中?
解决方案
回答
看着班上的成员,我想答案可能不是*。我不确定为什么还是要这样做,而不是创建自己的XML配置文件。
*否,不包括凌乱的反射黑客
回答
我认为我们正在寻找的是ConfigurationManager.OpenMappedExeConfiguration
它允许我们打开使用文件路径指定的配置文件(包装在ExeConfigurationFileMap内部)
如果其他发布者说的是正确的,并且我们不想创建一个全新的XML文件进行测试,那么我建议我们将"配置"编辑内容放入"测试"方法本身,然后针对新更改的配置运行测试数据。
回答
实际上,我已经找到了一种方法。
我们需要定义一个从原始配置部分继承的新类,如下所示:
public class MyXmlCustomConfigSection : MyCustomConfigSection { public MyXmlCustomConfigSection (string configXml) { XmlTextReader reader = new XmlTextReader(new StringReader(configXml)); DeserializeSection(reader); } }
然后,可以实例化ConfigurationSection对象,如下所示:
string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>"; MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);
希望它可以帮助某人:-)