Pregunta

Estoy tratando de unificar los valores de prueba que eventualmente terminarán en un archivo web.config. En mi proyecto de prueba, creé un archivo app.config con una sección web.config para guardar la configuración. En una situación normal, llamaría a System.Configuration.ConfigurationSettings.AppSettings, pero en este caso, eso no funciona. Vi esta pregunta , que es muy similar, pero no explica cómo obtener el NameValueCollection fuera del archivo de configuración. Aquí hay un ejemplo del archivo de configuración:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
      <membership defaultProvider="CustomMembershipProvider">
        <providers>
          <clear/>
          <add
            name="CustomMembershipProvider"
            applicationName="SettlementInfo"
            enablePasswordRetrieval="false"
            enablePasswordReset="false"
            requiresQuestionAndAnswer="true"
            writeExceptionsToEventLog="true" />
        </providers>
      </membership>
    </system.web>    

</configuration>

¿Alguien ha tratado con esto antes?

¿Fue útil?

Solución

Supongo que estoy confundido aquí; Parece que está intentando probar que ASP.NET está utilizando su proveedor de membresía personalizado de manera adecuada. ¿Correcto?

Si es así, estoy seguro al 99.999% de que no puede realizar una prueba unitaria utilizando el marco de trabajo de MS; debe realizar una prueba de integración implementándola en el servidor web (o ejecutando Cassini en VS) y escribiendo un nombre de usuario / contraseña en su página de inicio de sesión.

Ahora, es posible que haya entendido mal tu solicitud. Si es así, hágamelo saber y editaré mi respuesta en consecuencia.

Editar:

  

Por ahora, realmente estoy intentando   para probar los pares NameValue que salen   del archivo de configuración, para asegurarse de que   Si los valores no están presentes, mi   se están aplicando los valores predeterminados. En otra   palabras, quiero intentar tirar   applicationName, y verifica que   es igual a " SettlementInfo " y así sucesivamente.   Después de eso, estaré usando   pruebas de integración para asegurar que   ASP.NET está utilizando el marco personalizado   en lugar de la predeterminada. Hace eso   tiene sentido?

Necesito más que un comentario para responder, así que estoy editando. Si te leo correctamente, quieres probar tu programa en forma unitaria para asegurarte de que se trata de la configuración correcta, ¿sí? Lo que significa que quiere asegurarse de que su código capture, por ejemplo, la clave de configuración de aplicaciones correcta y maneje un valor nulo en ella, ¿correcto?

Si ese es el caso, estás de suerte; no necesita ningún app.config o web.config, puede establecer los valores que necesita como parte de su configuración de prueba.

Por ejemplo:

[TestMethod]
public void Test_Configuration_Used_Correctly()
{
    ConfigurationManager.AppSettings["MyConfigName"] = "MyConfigValue";
    MyClass testObject = new MyClass();
    testObject.ConfigurationHandler();
    Assert.AreEqual(testObject.ConfigurationItemOrDefault, "MyConfigValue");
}

[TestMethod]
public void Test_Configuration_Defaults_Used_Correctly()
{
    // you don't need to set AppSettings for a non-existent value...
    // ConfigurationManager.AppSettings["MyConfigName"] = "MyConfigValue";

    MyClass testObject = new MyClass();
    testObject.ConfigurationHandler();
    Assert.AreEqual(testObject.ConfigurationItemOrDefault, "MyConfigDefaultValue");
}

Otros consejos

Creo que solo tienes acceso al archivo webconfig mientras tu aplicación se está iniciando. La solución es bastante fácil - > " Fake " su config. Use un NameValueCollection y use eso en su lugar:

private static NameValueCollection CreateConfig()
{
NameValueCollection config = new NameValueCollection();
    config.Add("applicationName", "TestApp");
    config.Add("enablePasswordReset", "false");
    config.Add("enablePasswordRetrieval", "true");
    config.Add("maxInvalidPasswordAttempts", "5");
    config.Add("minRequiredNonalphanumericCharacters", "2");
    config.Add("minRequiredPasswordLength", "6");
    config.Add("requiresQuestionAndAnswer", "true");
    config.Add("requiresUniqueEmail", "true");
    config.Add("passwordAttemptWindow", "10");

    return config;
}

Ahora puede pasar fácilmente esa colección a su clase que analiza los datos de ella.

Debería poder usar el Administrador de configuración. Método GetSection () para extraer lo que quieras.

En realidad, si está utilizando NUnit, puede pegarlo en un App.config en su proyecto de prueba. Luego agregue esta línea a su evento posterior a la construcción:

copy / Y & # 8220; $ (ProjectDir) App.config & # 8221; & # 8220; $ (TargetDir) $ (TargetFileName) .config & # 8221;

Cuando creas el nuevo proveedor en tus pruebas, NUnit pasará los valores de tu app.config al proveedor en el método de inicialización.

¿Por qué no solo pegarlo en el archivo web.config?

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