Scripts des tests unitaires de SQL Server

Chaque test unitaire SQL Server contient une action de pré-test unique, une action de test et une action post-test. Chacune de ces actions contient à son tour :

  • Script Transact-SQL qui s’exécute sur une base de données.
  • Zéro ou plusieurs conditions de test qui évaluent les résultats retournés par l’exécution du script.

Le script de test Transact-SQL dans l’action de test est le seul composant que vous devez inclure dans chaque test unitaire SQL Server. En plus du script de test lui-même, vous souhaitez probablement également spécifier des conditions de test pour vérifier si le script de test a retourné la valeur ou l’ensemble de valeurs attendues. L’action de test effectue des exercices ou modifie un objet particulier dans cette base de données, puis évalue cette modification.

Pour chaque action de test, vous pouvez inclure une action de pré-test et une action post-test. Comme pour l’action de test, chaque action de pré-test et chaque action post-test contient un script Transact-SQL et zéro ou plusieurs conditions de test. Vous pouvez utiliser une action de pré-test pour vous assurer que la base de données est dans un état qui permet à votre action de test d’exécuter et de retourner des résultats significatifs. Par exemple, vous pouvez utiliser une action de pré-test pour vérifier qu’une table contient des données avant que le script de test effectue une opération sur ces données.

Une fois que l’action de pré-test prépare la base de données et que l’action de test retourne des résultats significatifs, l’action post-test peut être utilisée pour renvoyer la base de données à l’état dans lequel elle se trouvait avant l’exécution de l’action de pré-test. Dans certains cas, vous pouvez également utiliser l’action post-test pour valider les résultats de l’action de test. Cela est dû au fait que l’action post-test peut avoir plus de privilèges de base de données que l’action de test. Pour plus d’informations, consultez Vue d’ensemble des chaînes de connexion et des autorisations.

En plus de ces trois actions, il existe également deux scripts de test (appelés scripts courants), qui s’exécutent avant et après chaque exécution de test unitaire SQL Server. Par conséquent, jusqu’à cinq scripts Transact-SQL peuvent être exécutés pendant l’exécution d’un seul test unitaire SQL Server. Seul le script Transact-SQL contenu dans l’action de test est requis ; les scripts courants et les scripts d’action de pré-test et de post-test sont facultatifs.

Le tableau suivant fournit une liste complète des scripts associés à n’importe quel test unitaire SQL Server.

Action Type de script Descriptif
TestInitialize Script commun (initialisation) (Facultatif) Ce script précède toutes les actions de pré-test et de test dans le test unitaire. Le script TestInitialize s’exécute avant chaque test unitaire dans une classe de test donnée. Ce script s’exécute à l’aide du contexte privilégié.
Pré-test Script de test (Facultatif) Ce script fait partie du test unitaire. Le script de pré-test s’exécute avant l’action de test dans un test unitaire. Ce script s’exécute à l’aide du contexte privilégié.
Test Script de test (Obligatoire) Ce script fait partie du test unitaire. Ce script peut, par exemple, exécuter une procédure stockée qui obtient, insère ou met à jour les valeurs de table. Ce script s’exécute à l’aide du contexte d’exécution.
Après le test Script de test (Facultatif) Ce script fait partie du test unitaire. Le script post-test s’exécute après un test unitaire individuel. Ce script s’exécute à l’aide du contexte privilégié.
TestCleanup Script commun (nettoyage) (Facultatif) Ce script suit le test unitaire. Le script TestCleanup s’exécute après tous les tests unitaires dans une classe de test donnée. Ce script s’exécute à l’aide du contexte privilégié.

Pour plus d’informations sur les différents contextes de sécurité dans lesquels chacun de ces scripts s’exécute, consultez Vue d’ensemble des chaînes de connexion et des autorisations. Vous pouvez également consulter la section des autorisations de tests unitaires pour SQL Server dans Autorisations requises pour SQL Server Data Tools.

Ordre d’exécution des scripts

Il est important de comprendre l’ordre dans lequel chaque script s’exécute. Bien que vous ne puissiez pas modifier cet ordre, vous pouvez décider des scripts que vous souhaitez exécuter. L’illustration suivante inclut la sélection de scripts que vous pouvez utiliser dans une série de tests qui contient deux tests unitaires SQL Server et affiche l’ordre dans lequel ils s’exécutent :

Diagramme de deux tests unitaires de base de données.

Note

Si le déploiement du projet de base de données SQL Server est configuré, cette étape se produit au début de l’exécution du test, sous la chaîne de connexion de contexte privilégié. Pour plus d’informations, consultez Guide pratique pour configurer l’exécution des tests unitaires SQL Server.

Initialisation et nettoyage des scripts

Dans le Concepteur de tests unitaires SQL Server, les scripts TestInitialize et TestCleanup sont appelés scripts courants. L’exemple précédent suppose que les deux tests unitaires font partie de la même classe de test. Par conséquent, ils partagent les mêmes scripts TestInitialize et TestCleanup. Pour tous les tests unitaires au sein d’une classe de test unique, il s’agit toujours du cas. Toutefois, si votre exécution de test contient des tests unitaires provenant de différentes classes de test, les scripts courants de la classe de test associée sont exécutés avant et après l’exécution du test unitaire.

Si vous écrivez des tests unitaires uniquement à l’aide du Concepteur de tests unitaires SQL Server, vous ne connaissez peut-être pas le concept d’une classe de test. Chaque fois que vous créez un test unitaire en ouvrant le menu Test et en sélectionnant Nouveau test, SQL Server Data Tools génère une classe de test. Les classes de test s’affichent dans L’Explorateur de Solutions avec le nom de test que vous avez spécifié, suivi de l'extension .cs ou .vb. Dans chaque classe de test, les tests unitaires individuels sont stockés en tant que méthodes de test. Toutefois, quel que soit le nombre de méthodes de test (c’est-à-dire les tests unitaires), chaque classe de test peut avoir zéro ou un script TestInitialize et TestCleanup.

Vous pouvez utiliser le script TestInitialize pour préparer la base de données de test, et vous pouvez utiliser le script TestCleanup pour renvoyer la base de données de test à un état connu. Par exemple, vous pouvez utiliser TestInitialize pour créer une procédure stockée d’assistance que vous exécutez ultérieurement, dans le script de test, pour tester une autre procédure stockée.

Scripts de pré-test et de post-test

Les scripts associés aux actions de pré-test et de post-test sont susceptibles de varier d’un test unitaire à l’autre. Vous pouvez utiliser ces scripts pour établir des modifications incrémentielles dans la base de données, puis nettoyer ces modifications.