Question

J'essaie de tester des valeurs unitaires qui finiront par se retrouver dans un fichier web.config. Dans mon projet de test, j'ai créé un fichier app.config avec une section web.config pour conserver les paramètres. Dans une situation normale, j'appellerais System.Configuration.ConfigurationSettings.AppSettings, mais dans ce cas, cela ne fonctionne pas. J'ai vu cette question , qui est très similaire, mais n'indique pas comment extraire NameValueCollection du fichier de configuration. Voici un exemple de fichier de configuration:

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

Quelqu'un a-t-il déjà traité cette question?

Était-ce utile?

La solution

Je suppose que je suis confus ici; il semblerait que vous essayiez de vérifier qu'ASP.NET utilise votre fournisseur d'appartenance personnalisé de manière appropriée. Correct?

Si tel est le cas, je suis sûr à 99,999% que vous ne pourrez pas tester cela à l’aide de l’infrastructure MS; vous devez l’intégrer pour le tester en le déployant sur le serveur Web (ou en exécutant Cassini dans VS) et en saisissant un nom d’utilisateur / mot de passe sur votre page de connexion.

Maintenant, il est possible que j'ai mal compris votre demande. Si oui, faites le moi savoir et je modifierai ma réponse en conséquence.

Modifier:

  

Pour le moment, j'essaie vraiment   pour tester les paires NameValue qui sortent   du fichier de configuration, pour vous assurer que   si les valeurs ne sont pas présentes, mon   les valeurs par défaut sont appliquées. En d'autre   mots, je veux essayer de tirer   applicationName, et vérifiez qu'il   est égal à "SettlementInfo", et ainsi de suite.   Après cela, je vais utiliser   tests d'intégration pour s'assurer que   ASP.NET utilise le framework personnalisé   à la place de celui par défaut. Est-ce que   avoir un sens?

Il me faut plus qu'un commentaire pour répondre, alors j'édite. Si je vous ai bien lu, vous souhaitez tester votre programme pour s’assurer qu’il gère correctement la configuration, oui? Cela signifie que vous voulez vous assurer que votre code récupère, par exemple, la clé AppSettings correcte et gère une valeur null dans celle-ci, correct?

Si c'est le cas, vous avez de la chance. vous n'avez pas du tout besoin d'un app.config ou d'un web.config, vous pouvez définir les valeurs dont vous avez besoin dans le cadre de votre configuration de test.

Par exemple:

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

Autres conseils

Je pense que vous n’avez accès au fichier webconfig que pendant le démarrage de votre application. La solution est plutôt facile - > "Faux" votre config. Utilisez une NameValueCollection et utilisez-la plutôt:

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

Vous pouvez maintenant facilement transmettre cette collection à votre classe qui en analyse les données.

Vous devriez pouvoir utiliser le Gestionnaire de configuration. GetSection () pour extraire ce que vous voulez.

En fait, si vous utilisez NUnit, vous pouvez le coller dans un fichier App.config dans votre projet test. Ajoutez ensuite cette ligne à votre événement Post-build:

Copier / Y “$ (ProjectDir) App.config” “$ (TargetDir) $ (TargetFileName) .config”

Lorsque vous créez le nouveau fournisseur dans vos tests, NUnit transmettra les valeurs de votre app.config au fournisseur dans la méthode d'initialisation.

Pourquoi ne pas simplement le coller dans le fichier web.config?

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