Comment procéderiez-vous pour permuter une chaîne de connexion afin d'accéder à une base de données de test pour les tests unitaires?

StackOverflow https://stackoverflow.com/questions/1027155

Question

J'ai mis en place une base de données de tests pour commencer à tester par un appareil une application récemment ajoutée. Il s’agit d’une conception à 3 niveaux (couche présentation, BOL et DAL) et c’est la première fois que j’écris des tests unitaires.

J'ai décidé de commencer par le BOL et je pense que le meilleur moyen consiste à échanger le ConnectionString (qui a été transmis en tant que chaîne partagée) par un autre pointant vers ma nouvelle base de données de test. Cependant, je ne souhaite changer aucun code de production. Je souhaite simplement en quelque sorte rediriger l'application vers la base de tests lors des tests unitaires. Comment pourrais-je m'y prendre pour y parvenir?

Était-ce utile?

La solution

Ce que je fais habituellement est de créer une section de configuration qui contient les fonctionnalités permettant de déterminer la chaîne de connexion à utiliser.

Voici un exemple de base:

static ConfigurationSettings
{
     static String ConnectionString
     {
        get
        {
           var result = "TESTCONNECTIONSTRING";
           if (ConfigurationManager.ConnectionStrings["SOMEKEY"] != null)
               result = ConfigurationManager.ConnectionStrings["SOMEKEY"];
           return result;
     }
}

De cette façon, je n'ai pas à m'inquiéter de la façon de se connecter au système, et vous pouvez également remplacer ce comportement dans vos tests pour obtenir ce que vous voulez en ajoutant un configurateur.

La raison pour laquelle je n'utilise pas la route de fichiers de configuration multiples, est que je ne peux pas utiliser les fichiers de configuration lors de l'exécution d'une suite de tests (telle que le testrunner NUnit).

Autres conseils

Votre chaîne de connexion provient-elle d'un fichier de configuration? Pouvez-vous configurer une configuration correspondante dans vos tests unitaires?

Comme vous le constaterez probablement de toute façon, le code statique / partagé est considéré comme un élément diabolique dans les tests unitaires, et ce pour plusieurs raisons. L’une de ces raisons est qu’il est difficile de modifier les valeurs lors des tests unitaires.

Il est bien préférable de passer explicitement vos dépendances à votre système sous test (SUT), de préférence dans le constructeur. Dans votre cas, vous devez transmettre la chaîne de connexion au SUT via son constructeur.

Une approche encore meilleure serait d’abriter la couche d’accès aux données derrière une interface et de transmettre une instance de cette interface au SUT.

J'ai écrit quelques mots sur la Configuration impérative , mais en général, vous devriez lire le livre de Roy Osherove L'art du test unitaire - il traite beaucoup de ces problèmes.

Il est courant de conserver les chaînes de connexion dans un fichier de configuration. Si vous faites cela, utilisez simplement différents fichiers de configuration dans différents contextes.

Il existe une possibilité également si vous ne le faites pas (mais vous devrez peut-être modifier le code de production). Laissez la chaîne de connexion être injectée via un constructeur ou un séparateur. Ensuite, en production, vous utilisez la chaîne de connexion de production; et dans les tests, vous pouvez vous connecter à votre base de données de tests.

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