Partager via


Utilisation de conditions de test dans des tests unitaires de base de données

Dans un test unitaire de base de données classique, un script de test Transact-SQL exécute et retourne une instance de la classe ExecutionResult. L'instance de cette classe contient un groupe de données, la durée d'exécution et les lignes affectées par le script. Toutes ces informations sont collectées pendant l'exécution du script. Ces résultats peuvent être évalués dans le script Transact-SQL à l'aide de la fonction RAISERROR ; ils peuvent également être évalués à l'aide de conditions de test. Visual Studio Premium fournit un jeu de conditions de test prédéfinies que vous pouvez utiliser.

Conditions de test prédéfinies

Le tableau suivant répertorie les conditions de test prédéfinies que vous pouvez ajouter en utilisant le volet Conditions de test du Concepteur de test unitaire de base de données.

Condition de test

Description de la condition de test

Checksum de données

Échoue si le checksum du jeu de résultats retourné par le script Transact-SQL ne correspond pas au checksum attendu. Pour plus d'informations, consultez Spécification d'un checksum de données.

RemarqueRemarque
Cette condition de test est déconseillée si vous retournez des données qui vont varier entre les séries de tests.Par exemple, si votre jeu de résultats contient des dates ou des heures généréess, ou s'il contient des colonnes d'identité, vos tests échoueront car le checksum sera différent dans chaque série.

Jeu de résultats vide

Échoue si le jeu de résultats retourné par le script Transact-SQL n'est pas vide.

Durée d'exécution

Échoue si l'exécution du script de test Transact-SQL dure plus longtemps que prévu. La durée d'exécution par défaut est de 30 secondes.

La durée d'exécution s'applique uniquement au script de test, pas au script de prétest ou le script de post-test.

Schéma attendu

Échoue si les types de colonnes et de données du jeu de résultats ne correspondent pas à ceux spécifiés pour la condition de test. Vous devez spécifier un schéma par l'intermédiaire des propriétés de la condition de test. Pour plus d'informations, consultez Spécification d'un schéma attendu.

Non concluant

Produit toujours un test avec le résultat Non concluant. C'est la condition par défaut ajoutée à chaque test. Cette condition de test est incluse pour indiquer que la vérification des tests n'a pas été implémentée. Supprimez cette condition de test de votre test après avoir ajouté d'autres conditions de test.

Jeu de résultats non vide

Échoue si le jeu de résultats est vide. Vous pouvez utiliser cette condition de test ou la condition Jeu de résultats vide avec la fonction Transact-SQL @@RAISERROR dans votre script de test pour tester si une mise à jour a fonctionné correctement. Par exemple, vous pouvez enregistrer les valeurs antérieures à la mise à jour, exécuter la mise à jour, comparer les valeurs postérieures à la mise à jour, puis déclencher une erreur si vous n'obtenez pas les résultats attendus.

Nombre de lignes

Échoue si le jeu de résultats ne contient pas le nombre attendu de lignes.

Valeur scalaire

Échoue si une valeur particulière du jeu de résultats n'est pas égale pas la valeur spécifiée. La Valeur attendue par défaut est null.

Notes

La condition de test Durée d'exécution spécifie une limite de temps pendant laquelle le script de test Transact-SQL doit s'exécuter. Si cette limite de temps est dépassée, le test échoue. Les résultats des tests incluent également une statistique Durée, qui est différente de la condition de test Durée d'exécution. La statistique Durée inclut non seulement la durée d'exécution, mais également le temps nécessaire pour se connecter deux fois à la base de données, le temps nécessaire pour exécuter tout autre script de test, tels que le script de prétest et le script de post-test, et le temps nécessaire pour exécuter les conditions de test. Par conséquent, un test peut réussir même si sa durée est supérieure à sa durée d'exécution.

La valeur Durée rapportée n'inclut pas le temps utilisé pour la génération de données et le déploiement de schéma parce qu'ils se produisent avant l'exécution des tests. Pour afficher la durée des tests, sélectionnez une série de tests dans la fenêtre Résultats des tests, cliquez avec le bouton droit et choisissez Afficher les détails des résultats des tests.

Vous pouvez ajouter des conditions de test à des tests unitaires de base de données en utilisant le volet Conditions de test du Concepteur de test unitaire de base de données. Pour plus d'informations, consultez Comment : ajouter des conditions de test aux tests unitaires de base de données.

Vous pouvez également modifier directement votre code de méthode de test pour ajouter plus de fonctionnalités. Pour plus d'informations, consultez Comment : ouvrir un test unitaire de base de données à modifier et Comment : écrire un test unitaire de base de données qui s'exécute dans la portée d'une transaction unique. Par exemple, vous pouvez ajouter des fonctionnalités à une méthode de test en ajoutant des instructions Assert. Pour plus d'informations, consultez Utilisation d'assertions Transact-SQL dans les tests unitaires de base de données.

Échecs attendus

Vous pouvez, si vous le souhaitez, créer des tests unitaires de base de données pour tester un comportement qui ne doit pas aboutir. Ces échecs attendus sont parfois appelés tests négatifs. Quelques exemples :

  • Vérifiez qu'une procédure stockée qui supprime les données d'un client échoue si vous spécifiez un ID de client non valide

  • Vérifiez qu'une procédure stockée qui remplit une commande échoue si la commande n'a jamais été passée ou si elle a déjà été remplie

  • Vérifiez qu'une procédure stockée qui annule une commande ne peut pas annuler les commandes terminées ou des commandes qui ont déjà été annulées

Vous pouvez définir des tests unitaires de base de données pour les procédures stockées qui lèvent les exceptions SQL attendues. Vous pouvez ajouter un attribut à la méthode de test unitaire pour indiquer la ou les exceptions attendues. Ce faisant, vous empêchez le test d'échouer lorsque l'exception se produit.

Pour marquer une méthode de test unitaire de base de données à l'aide des exceptions attendues, ajoutez l'attribut suivant :

[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]

Où :

  • nnnnn est le numéro du message attendu, par exemple 14025

  • x est la gravité de l'exception attendue

  • y est l'état de l'exception attendue

Tous les paramètres non spécifiés sont ignorés. Vous transmettez ces paramètres à l'instruction RAISERROR dans le code de votre base de données. Si vous spécifiez MatchFirstError = false, l'attribut correspondra à n'importe laquelle des SqlErrors de l'exception. Le comportement par défaut (MatchFirstError = true) ne doit correspondre qu'à la première erreur qui se produit.

Pour obtenir un exemple sur la façon d'utiliser les exceptions attendues et un test unitaire de base de données négatif, consultez Procédure pas à pas : création et exécution d'un test unitaire de base de données.

Spécification d'un checksum de données

Après avoir ajouté une condition de test de checksum de données au test unitaire de votre base de données, vous devez configurer le checksum à l'aide de la procédure suivante :

Pour spécifier un checksum attendu

  1. Dans la liste des conditions de test, cliquez sur la condition de test Checksum de données pour laquelle vous souhaitez spécifier un checksum.

  2. Ouvrez la fenêtre Propriétés à l'aide de la touche F4. Vous pouvez également ouvrir le menu Affichage et cliquer sur Fenêtre Propriétés.

  3. (Facultatif) Vous pouvez, si vous le souhaitez, modifier la propriété (Nom) de la condition de test pour qu'elle soit plus descriptive.

  4. Dans la propriété Configuration, cliquez sur le bouton Parcourir ().

    La boîte de dialogue Configuration de NomConditionTest s'affiche.

  5. Spécifiez une connexion à la base de données que vous souhaitez tester. Pour plus d'informations, consultez Comment : créer une connexion de base de données.

  6. Par défaut, le corps Transact-SQL de votre test s'affiche dans le panneau de modification. Vous pouvez modifier le code, si nécessaire, afin de générer les résultats attendus. Par exemple, si votre test comporte du code en prétest, vous devrez peut-être ajouter ce code.

    Important

    Si vous modifiez une condition de checksum pour laquelle vous avez préalablement spécifié un checksum, toutes les modifications que vous avez apportées dans le panneau de modification ne sont pas enregistrées. Vous devez de nouveau effectuer ces modifications avant de cliquer sur Récupérer.

  7. Cliquez sur Récupérer.

    Le code Transact-SQL est exécuté pour la connexion de base de données spécifiée et les résultats s'affichent dans la boîte de dialogue.

  8. Si les résultats correspondent aux résultats attendus de votre test, cliquez sur OK. Sinon, modifiez le corps Transact-SQL et recommencez les étapes 6, 7 et 8 jusqu'à ce que les résultats soient ceux attendus.

    La colonne Valeur de la condition de test affiche la valeur du checksum attendu.

Spécification d'un schéma attendu

Après avoir ajouté une condition de test de schéma attendu au test unitaire de votre base de données, vous devez configurer le schéma attendu à l'aide de la procédure suivante :

Pour spécifier un schéma attendu

  1. Dans la liste de conditions de test, cliquez sur la condition de test Schéma attendu pour laquelle vous souhaitez spécifier un schéma.

  2. Ouvrez la fenêtre Propriétés à l'aide de la touche F4. Vous pouvez également ouvrir le menu Affichage et cliquer sur la fenêtre Propriétés.

  3. (Facultatif) Vous pouvez, si vous le souhaitez, modifier la propriété (Nom) de la condition de test pour qu'elle soit plus descriptive.

  4. Dans la propriété Configuration, cliquez sur le bouton Parcourir ().

    La boîte de dialogue Configuration de NomConditionTest s'affiche.

  5. Spécifiez une connexion à la base de données que vous souhaitez tester. Pour plus d'informations, consultez Comment : créer une connexion de base de données.

  6. Par défaut, le corps Transact-SQL de votre test s'affiche dans le panneau de modification. Vous pouvez modifier le code, si nécessaire, afin de générer les résultats attendus. Par exemple, si votre test comporte du code en prétest, vous devrez peut-être ajouter ce code.

    Important

    Si vous modifiez une condition de schéma attendu pour laquelle vous avez préalablement spécifié un schéma, toutes les modifications que vous avez effectuées dans le panneau de modification ne sont pas enregistrées. Vous devez de nouveau effectuer ces modifications avant de cliquer sur Récupérer.

  7. Cliquez sur Récupérer.

    Le code Transact-SQL est exécuté pour la connexion de base de données spécifiée et les résultats s'affichent dans la boîte de dialogue. Étant donné que vous vérifiez le schéma, ou la forme, du jeu de résultats et non les valeurs des résultats, vous n'êtes pas tenu de consulter toutes les données figurant dans les résultats retournés, tant que les colonnes s'affichent comme attendu.

  8. Si les résultats correspondent aux résultats attendus de votre test, cliquez sur OK. Sinon, modifiez le corps Transact-SQL et recommencez les étapes 6, 7 et 8 jusqu'à ce que les résultats soient ceux attendus.

    La colonne Valeur de la condition de test affiche des informations sur le schéma attendu. Par exemple, elle peut indiquer « Attendu : 2 tables ».

Conditions de test extensibles

En plus de six conditions de test prédéfinies, vous pouvez écrire vous-même de nouvelles conditions de test. Ces conditions de test s'afficheront dans le volet Conditions de test du Concepteur de test unitaire de base de données. Pour plus d'informations, consultez Comment : créer des conditions de test pour le concepteur de test unitaire de base de données

Voir aussi

Concepts

Utilisation d'assertions Transact-SQL dans les tests unitaires de base de données

Scripts dans les tests unitaires de base de données