Cómo Proyecto de leer Test Unit app.config De Prueba Con anfitrión Tipo ( “Moles”)

StackOverflow https://stackoverflow.com/questions/4105604

  •  29-09-2019
  •  | 
  •  

Pregunta

Tengo las pruebas 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 única diferencia entre ellos es [HostType("Moles")]. Pero los primeros pases y la segunda falla. ¿Cómo puedo leer App.config de la segunda prueba?

O puede ser que puedo añadir algo de otro archivo de configuración en otro lugar?

¿Fue útil?

Solución

http: // sociales .msdn.microsoft.com / foros / en / PEX / hilo / 9b4b9ec5-582c-41e8-8b9c-1bb9457ba3f6

Por el momento, como un trabajo alrededor, usted podría intentar añadir los ajustes de configuración a Microsoft.Moles.VsHost.x86.exe.config

Otros consejos

Suponiendo que usted está tratando de valores de acceso en appsettings, ¿qué limitarse a añadir la configuración en el inicio de la prueba. Algo así como:

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

A continuación, cuando sus intentos de prueba para leer los AppSettings "clave", se devolverá "Valor".

Usted acaba de agregar el archivo "app.config" al proyecto de prueba unitaria. Se leerá automáticamente.

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

me encontré con este problema en el trabajo y no le gustaba ninguna de estas respuestas. También tengo el problema de que el archivo de configuración se lee en un constructor estático que significa que no puedo Mole ConfigurationManager antes de ejecutar el constructor estático.

He intentado esto en mi ordenador personal y se encontró que el archivo de configuración se estaba leyendo correctamente. Resulta que yo estaba usando Pex 0.94.51006.1 en casa. Esto es un poco mayor que la actual. Yo era capaz de encontrar una descarga para la versión académica más antigua: http://research.microsoft.com /en-us/downloads/d2279651-851f-4d7a-bf05-16fd7eb26559/default.aspx

He instalado esto en mi equipo de trabajo y todo está funcionando perfectamente. En este punto, estoy de degradar a la versión anterior hasta que se libere una versión más reciente de trabajo.

Esto es lo que estoy utilizando para obtener el AppConfig correcta y ConnectionString secciones:

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 ConnectionString parte aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top