Question

Je les essais 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.");
    }
}

La seule différence entre eux est [HostType("Moles")]. Mais les premiers passages et la seconde échoue. Comment puis-je lire App.config du second test?

Ou peut-être que je peux ajouter une autre fichier de configuration dans un autre lieu?

Était-ce utile?

La solution

Voir http: // sociale .msdn.microsoft.com / Forums / fr / PEX / fil / 9b4b9ec5-582c-41e8-8b9c-1bb9457ba3f6

Dans le même temps, comme un travail autour, vous pouvez essayer d'ajouter les paramètres de configuration à Microsoft.Moles.VsHost.x86.exe.config

Autres conseils

En supposant que vous essayez de valeurs d'accès à appSettings, que diriez-vous simplement ajouter la configuration au début de votre test. Quelque chose comme:

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

Ensuite, lorsque vos essais de test pour lire les AppSettings « clés », « Value » sera retourné.

Vous ajoutez simplement votre fichier « App.Config » au projet de test unitaire. Il lira automatiquement.

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

je suis tombé sur cette question au travail et n'a pas comme aucune de ces réponses. J'ai aussi le problème que le fichier de configuration est en cours de lecture dans un constructeur statique qui signifie que je ne peux pas Mole ConfigurationManager avant que le constructeur statique est exécutée.

J'ai essayé sur mon ordinateur à la maison et a trouvé que le fichier de configuration a été lu correctement. Il se trouve que j'utilisais Pex 0.94.51006.1 à la maison. Ce chiffre est légèrement plus ancienne que celle actuelle. J'ai pu trouver un téléchargement pour la version académique plus: http://research.microsoft.com /en-us/downloads/d2279651-851f-4d7a-bf05-16fd7eb26559/default.aspx

Je l'ai installé sur mon ordinateur de travail et tout fonctionne parfaitement. À ce stade, je suis à la version déclasser plus jusqu'à ce qu'une version de travail plus récente est libérée.

est ce que j'utilise pour obtenir le AppConfig correct et sections 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;

Saw la partie ConnectionString

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top