59 votes

Les tests unitaires de l'application.fichier de configuration avec NUnit

Quand vous êtes de l'unité de test d'une application qui s'appuie sur les valeurs à partir d'une application.fichier de config? Comment tester que ces valeurs sont lues correctement et comment votre programme réagit à incorrecte valeurs saisies dans un fichier de config?

Il serait ridicule d'avoir à modifier le fichier de configuration de la NUnit application, mais je ne peux pas lire dans les valeurs de l'app.config que je veux tester.

Edit: je pense que je me dois de préciser peut-être. Je ne suis pas inquiet au sujet de la ConfigurationManager à défaut de lire les valeurs, mais je suis préoccupé par l'examen de mon programme réagit aux valeurs lues dans.

44voto

Mendelt Points 21583

J'ai l'habitude d'isoler des dépendances externes, comme la lecture d'un fichier de config dans leur propre façade de la classe avec très peu de fonctionnalités. Dans les tests que je peux créer une version fantaisie de cette classe qui implémente et l'utiliser à la place du vrai fichier de configuration. Vous pouvez créer votre propre maquette ou de l'utilisation d'un framework comme moq ou rhino se moque de cela.

De cette façon, vous pouvez facilement essayer votre code avec différentes valeurs de configuration sans avoir à écrire des tests complexes que la première écriture xml de fichiers de configuration. Le code qui lit la configuration est généralement tellement simple qu'il a besoin de très peu de tests.

24voto

Pervez Choudhury Points 1637

Vous pouvez appeler la méthode set de ConfigurationManager.AppSettings pour définir les valeurs de test de l'unité.

[SetUp]
public void SetUp()
{
  ConfigurationManager.AppSettings.Set("SettingKey" , "SettingValue");
  // rest of unit test code follows
}

Lors de l'exécution des tests unitaires, il sera alors utiliser ces valeurs pour exécuter le code

16voto

Steven A. Lowe Points 40596

Vous pouvez lire et écrire à l' app.config le fichier avec l' ConfigurationManager classe

11voto

Tuomas Hietanen Points 2615

J'ai été confronté à des problèmes similaires avec le web.config.... J'ai trouver une solution intéressante. Vous pouvez encapsuler configuration de la fonction de lecture, par exemple, quelque chose comme ceci:

public class MyClass {

public static Func<string, string> 
     GetConfigValue = s => ConfigurationManager.AppSettings[s];

//...

}

Et puis l'utiliser normalement

string connectionString = MyClass.GetConfigValue("myConfigValue");

mais dans l'unité de test initialiser "remplacer" la fonction comme ceci:

MyClass.GetConfigValue = s =>  s == "myConfigValue" ? "Hi", "string.Empty";

Plus à ce sujet:

http://rogeralsing.com/2009/05/07/the-simplest-form-of-configurable-dependency-injection/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X