Domanda

Non ho le prove di folowing:

[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.");
    }
}

L'unica differenza tra loro è [HostType("Moles")]. Ma i primi passi e la seconda non riesce. Come posso leggere App.config dalla seconda prova?

o possono essere posso aggiungere un po 'di un altro file di configurazione in altro luogo?

È stato utile?

Soluzione

http: // sociale .msdn.microsoft.com / Forum / it / PEX / thread / 9b4b9ec5-582c-41e8-8b9c-1bb9457ba3f6

Nel frattempo, come un lavoro in giro, si potrebbe provare ad aggiungere le impostazioni di configurazione per Microsoft.Moles.VsHost.x86.exe.config

Altri suggerimenti

Supponendo che si sta tentando di valori di accesso in appSettings, come circa semplicemente aggiungendo la configurazione all'inizio del test. Qualcosa di simile:

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

Poi, quando i tentativi di prova a leggere le AppSettings "chiave", "Valore" verrà restituito.

È sufficiente aggiungere il file "app.config" per il progetto di test unità. Si leggerà automaticamente.

    [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;
                };
    }

mi sono imbattuto in questo problema al lavoro e non ha come qualsiasi di queste risposte. Ho anche il problema che il file di configurazione viene letto in un costruttore statico che significa che posso non Mole ConfigurationManager prima che il costruttore statico viene eseguito.

Ho provato questo sul mio computer di casa e ha scoperto che il file di configurazione si leggeva correttamente. Si scopre che stavo usando Pex 0.94.51006.1 a casa. Questo è un po 'più vecchio di quello attuale. Sono stato in grado di trovare un download per la versione più vecchia accademica: http://research.microsoft.com /en-us/downloads/d2279651-851f-4d7a-bf05-16fd7eb26559/default.aspx

ho installato questo sul mio computer di lavoro e tutto funziona alla perfezione. A questo punto, ho il downgrade alla versione precedente fino a quando viene rilasciata una versione funzionante più recente.

Questo è quello che sto usando per ottenere la corretta AppConfig e ConnectionString sezioni:

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;

Visto il ConnectionString parte qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top