web-dev-qa-db-fra.com

Le problème avec NUnit et app.config

Lorsque je lance un test simple sur la connexion à la base de données, je reçois une erreur dans NUnit

[Test]
public void TestConn()
{
    string  connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;
    SqlConnection connection = new SqlConnection(connectionString);
    connection.Open();
    Assert.AreEqual(ConnectionState.Open, connection.State);
    connection.Close();
 }

System.NullReferenceException: la référence d'objet n'est pas définie sur une instance d'objet.

en ligne:

connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString;

Puis-je utiliser ConfigurationManager dans des tests?

30
Mike

Oui, vous pouvez. Vous devez vous assurer que toute configuration que vous référencez dans vos tests existe bien dans le app.config du projet de test.

En d'autres termes, le projet dans lequel se trouve votre test n'a pas de chaîne de connexion "FertigungRead" définie dans son app.config.

Une façon de procéder consiste à ajouter le app.config du système testé au projet test sous forme de lien , de cette manière, toute modification est apportée aux deux projets.

25
Oded
  1. Allez à NUnit/Project/Edit ...
  2. Dans le panneau Propriété de configuration, sélectionnez Nom du fichier de configuration.
  3. Mettez là yourAssemblyName . Dll.config

NB: si ne fonctionne pas, essayez d’ajouter un chemin, par ex. bin\Debug \ yourAssemblyName . dll.config

Votre fichier de projet test yourAssemblyName . Nunit sera mis à jour.

Et oui, assurez-vous que App.config dans votre projet de test correspond à ce que vous accédez à test, c.-à-d.

[Test]
public void TestConn()
{
   var sss = ConfigurationManager.AppSettings["TestKey"];
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestKey" value="testKeyValue"/>
  </appSettings>
</configuration>
5
ivan_d

Je voudrais ajouter un point. Il existe une note dans la documentation de nunit et, en fonction du scénario d'utilisation, il convient de nommer et de placer le fichier de configuration. J'ai été bloqué sur cette question pendant un moment.

La documentation dit:

Si un seul assembly est en cours de chargement, le fichier de configuration reçoit le nom du fichier Assembly avec l'extension config. Par exemple, le fichier de configuration utilisé pour exécuter nunit.tests.dll doit être nommé nunit.tests.dll.config et situé dans le même répertoire que la dll.

Si un projet NUnit est en cours de chargement, le fichier de configuration utilise le nom du fichier de projet avec l'extension modifiée en config. Par exemple, le projet AllTests.nunit nécessiterait un fichier de configuration nommé AllTests.config, situé dans le même répertoire que AllTests.nunit. La même règle est suivie lors du chargement de projets ou de solutions Visual Studio.

http://www.nunit.org/index.php?p=configFiles&r=2.2.10

4

Vos tests unitaires devraient toujours fonctionner aussi longtemps que vous avez la même configuration pour votre projet de test que pour votre projet principal.

Nous vous suggérons d'utiliser un événement de pré-génération dans votre projet test pour copier le fichier de configuration de votre application dans le projet test. Cela évite de devoir maintenir deux ensembles de configuration.

copier $ (SolutionDir) chemin d'accès au projet principal\Web.config $ (ProjectDir) App.config

3
Richard Everett

Voir ma réponse nunit and configs Vous devez dire à nunit quel est le nom du fichier de configuration. il recherche par défaut namespace.config

1
skyfoot

Pourquoi avez-vous besoin d'un test unitaire pour voir si SqlConnection fonctionne? Vous devriez tester votre code, pas celui de Microsoft. Je ne vois pas vraiment l'intérêt de vérifier si la chaîne de connexion est correcte dans vos tests unitaires. La configuration utilisée par les tests unitaires diffère de celle utilisée par votre code de production.

Toutefois, en général, si vous avez besoin de données de configuration pour les tests unitaires, créez un fichier app.config dans le projet de test. Remplissez les éléments appSettings et connectionStrings, etc. avec les valeurs appropriées pour votre environnement de test. Ne vous souciez pas de vérifier si ConfigurationManager ou SqlConnection fonctionne. Vous allez simplement créer du code que vous devez gérer, mais cela ne vérifie pas le code de production que vous écrivez.

1
tvanfosson

L'homme regarde: http://nunit.net/blogs/?p=9

Comme il le suggère, je mets un MyProjectTests.dll.config dans la racine du projet et tout fonctionne.

Un exemple de mon fichier de configuration est:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
     <add key="TestKey" value="Ok!"/>
</appSettings>
</configuration>

Et j'utilise le simple: ConfigurationManager.AppSettings["TestKey"];

1
Custodio

Lorsqu'un fichier de configuration est utilisé dans le projet dans lequel un test est exécuté, des conventions de dénomination spécifiques doivent être suivies.

Le nom du fichier de configuration doit être le nom du fichier Assembly avec l'extension config. Par exemple, le fichier de configuration utilisé pour exécuter MyUnitTest.tests.dll doit s'appeler MyUnitTest.tests.dll.config et se trouver dans le même répertoire que le MyUnitTest.nunit.

Nous pouvons aussi configurer ceci dans les pré-constructions comme ci-dessous

copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config 
0
manjula k m