如何从HostType(“Moles”)测试中读取UnitTest项目的App.Config

我有以下测试:

[TestClass] public class GeneralTest { [TestMethod] public void VerifyAppDomainHasConfigurationSettings() { string value = ConfigurationManager.AppSettings["TestValue"]; Assert.IsFalse(String.IsNullOrEmpty(value), "No App.Config found."); } [TestMethod] [HostType("Moles")] public void VerifyAppDomainHasConfigurationSettingsMoles() { string value = ConfigurationManager.AppSettings["TestValue"]; Assert.IsFalse(String.IsNullOrEmpty(value), "No App.Config found."); } } 

它们之间的唯一区别是[HostType("Moles")] 。 但第一次通过,第二次失败。 如何从第二次测试中读取App.config?

或者我可以在其他地方添加另一个配置文件?

见http://social.msdn.microsoft.com/Forums/en/pex/thread/9b4b9ec5-582c-41e8-8b9c-1bb9457ba3f6

同时,作为解决方法,您可以尝试将配置设置添加到Microsoft.Moles.VsHost.x86.exe.config

假设您正在尝试访问appSettings中的值,那么只需在测试开始时添加配置即可。 就像是:

 ConfigurationManager.AppSettings["Key"] = "Value"; 

然后,当您的测试尝试读取AppSettings“Key”时,将返回“Value”。

您只需将“App.Config”文件添加到unit testing项目中。 它会自动读取。

  [ClassInitialize] public static void MyClassInitialize(TestContext testContext) { System.Configuration.Moles.MConfigurationManager.GetSectionString = (string configurationName) => { ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); Assembly assembly = Assembly.GetExecutingAssembly(); fileMap.ExeConfigFilename = assembly.Location + ".config"; Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); object section = config.GetSection(configurationName); if (section is DefaultSection) { ConfigurationSection configurationSection = (ConfigurationSection) section; Type sectionType = Type.GetType(configurationSection.SectionInformation.Type); if (sectionType != null) { IConfigurationSectionHandler sectionHandler = (IConfigurationSectionHandler)AppDomain.CurrentDomain.CreateInstanceAndUnwrap(sectionType.Assembly.FullName, sectionType.FullName); section = sectionHandler.Create( configurationSection.SectionInformation.GetParentSection(), null, XElement.Parse(configurationSection.SectionInformation.GetRawXml()).ToXmlNode()); } } return section; }; } 

我在工作中遇到过这个问题,并不喜欢这些答案。 我还有一个问题,即在静态构造函数中读取配置文件,这意味着在执行静态构造函数之前我无法进行Mole ConfigurationManager。

我在家用计算机上试过这个,发现配置文件正在正确读取。 事实certificate我在家里使用的是Pex 0.94.51006.1。 这比现在的略长。 我能够找到旧版学术版的下载: http : //research.microsoft.com/en-us/downloads/d2279651-851f-4d7a-bf05-16fd7eb26559/default.aspx

我在我的工作电脑上安装了这个,一切都很完美。 此时,我将降级到旧版本,直到发布更新的工作版本。

这是我用来获取正确的AppConfig和ConnectionString部分:

 var config = System.Configuration.ConfigurationManager.OpenExeConfiguration(Reflection.Assembly.GetExecutingAssembly().Location); typeof(Configuration.ConfigurationElementCollection).GetField("bReadOnly", Reflection.BindingFlags.Instance | Reflection.BindingFlags.NonPublic).SetValue(System.Configuration.ConfigurationManager.ConnectionStrings, false); foreach (Configuration.ConnectionStringSettings conn in config.ConnectionStrings.ConnectionStrings) System.Configuration.ConfigurationManager.ConnectionStrings.Add(conn); foreach (Configuration.KeyValueConfigurationElement conf in config.AppSettings.Settings) System.Configuration.ConfigurationManager.AppSettings(conf.Key) = conf.Value; 

在这里看到了ConnectionString部分