Domanda

Sto provando a testare i valori unitari che finiranno per finire in un file web.config. Nel mio progetto di test, ho creato un file app.config con una sezione web.config per contenere le impostazioni. In una situazione normale, chiamerei System.Configuration.ConfigurationSettings.AppSettings, ma in questo caso non funziona. Ho visto questa domanda , che è molto simile, ma non spiega come estrarre NameValueCollection dal file di configurazione. Ecco un esempio del file di configurazione:

<?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>

Qualcuno l'ha già affrontato prima?

È stato utile?

Soluzione

Immagino di essere confuso qui; sembra che tu stia provando a verificare che ASP.NET stia utilizzando in modo appropriato il tuo provider di appartenenze personalizzato. Corretta?

In tal caso, sono sicuro al 99,999% di non poter testare l'unità utilizzando il framework MS; è necessario testarlo per l'integrazione distribuendolo al server web (o eseguendo Cassini in VS) e digitando un nome utente / password nella pagina di accesso.

Ora, è possibile che ho frainteso la tua richiesta. In tal caso, fammi sapere e modificherò la mia risposta di conseguenza.

Modifica

  

Per ora, ci sto davvero provando   per testare le coppie NameValue in uscita   del file di configurazione, per assicurarsi che   se i valori non sono presenti, mio   vengono applicati i valori predefiniti. In altro   parole, voglio provare a tirare   applicationName e verificalo   è uguale a "SettlementInfo" e così via.   Successivamente, userò   test di integrazione per garantire che   ASP.NET sta utilizzando il framework personalizzato   al posto di quello predefinito. Fa quello   ha senso?

Ho bisogno di più di un commento per rispondere, quindi sto modificando. Se ti leggo correttamente, vuoi testare l'unità del tuo programma per assicurarti che gestisca correttamente la configurazione, sì? Significa che vuoi assicurarti che il tuo codice acquisisca, ad esempio, la chiave AppSettings corretta e gestisca un valore null in essa, corretto?

In tal caso, sei fortunato; non hai bisogno di app.config o web.config, puoi impostare i valori che ti servono come parte della configurazione del test.

Ad esempio:

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

Altri suggerimenti

Ritengo che tu abbia accesso al file webconfig solo quando l'applicazione verrà avviata. La soluzione è piuttosto semplice - > & Quot; fasullo " la tua configurazione. Usa un NameValueCollection e usalo invece:

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

Ora puoi facilmente passare quella raccolta nella tua classe che ne analizza i dati.

Dovresti essere in grado di utilizzare il ConfigurationManager. Metodo GetSection () per estrarre quello che vuoi.

In realtà, se stai usando NUnit, puoi incollarlo in un App.config nel tuo progetto di test. Quindi aggiungi questa riga al tuo evento Post-build:

copia / Y & # 8220; $ (ProjectDir) Conf. app & # 8221; & # 8220; $ (TargetDir) $ (TargetFileName) .config & # 8221;

Quando crei il nuovo provider nei tuoi test, NUnit passerà i valori nella tua app.config al provider nel metodo di inizializzazione.

Perché non limitarlo nel file web.config?

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