Partager via


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

Dans un test unitaire de base de données, un script de test Transact-SQL s'exécute et retourne un résultat. Parfois, les résultats sont retournés comme un jeu de résultats.  Vous pouvez valider des résultats à l'aide de conditions de test. Par exemple, vous pouvez utiliser une condition de test pour vérifier le nombre de lignes retournées dans un jeu de résultats spécifique ou la durée d'exécution d'un test particulier. Pour plus d'informations sur les conditions de test, consultez Utilisation de conditions de test dans des tests unitaires de base de données.

Au lieu d'utiliser des conditions de test, vous pouvez utiliser des assertions Transact-SQL qui sont des instructions RAISERROR dans un script Transact-SQL. Dans certains cas, il est possible que vous préfériez utiliser une assertion Transact-SQL au lieu d'une condition de test.

Utilisation d'assertions Transact-SQL

Vous devez considérer les points suivants avant de décider de valider des données en utilisant des assertions Transact-SQL ou des conditions de test.

  • Performances. Il est plus rapide d'exécuter une assertion Transact-SQL sur le serveur que de déplacer d'abord les données vers un ordinateur client et de les manipuler en local.

  • Familiarité avec le langage. Vous pouvez préférer un langage particulier selon votre compétence actuelle et, par conséquent, choisir des assertions Transact-SQL ou des conditions de test C# ou Visual Basic.

  • Validation complexe. Dans certaines instances, vous pouvez générer une validation de test plus complexe qu'en C# ou Visual Basic et valider vos tests sur le client.

  • Bibliothèques de validation héritées. Si vous avez déjà un code qui effectue la validation, vous pouvez l'utiliser dans un test unitaire de base de données au lieu d'utiliser des conditions de test.

Marquer des méthodes de test unitaire de base de données à l'aide de l'exception attendue

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)> _
[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 = true, l'attribut correspondra à n'importe quel SqlErrors dans 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.

Instruction RAISERROR

Vous pouvez utiliser directement des assertions Transact-SQL sur le serveur en incluant l'instruction RAISERROR dans votre script Transact-SQL. La syntaxe est la suivante :

**RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)**

où :

@ErrorMessage est tout message d'erreur défini par l'utilisateur. Vous pouvez mettre en forme cette chaîne de message de façon identique à la fonction printf_s.

@ErrorSeverity est un niveau de gravité défini par l'utilisateur entre 0 et 18.

Notes

Les valeurs 0 et 10 pour le niveau de gravité ne provoquent pas l'échec du test unitaire de base de données. Vous pouvez utiliser toute autre valeur dans la plage 0 à 18 pour provoquer l'échec du test.

@ErrorState est un entier arbitraire compris entre 1 et 127. Vous pouvez utiliser cet entier pour faire la distinction entre les occurrences d'une erreur simple survenue à différents endroits dans le code.

Pour plus d'informations, consultez RAISERROR (Transact-SQL) dans la documentation en ligne de SQL Server sur le site Web de Microsoft. Un exemple d'utilisation de RAISERROR dans un test unitaire de base de données est fourni dans la rubrique Comment : écrire un test unitaire de base de données qui s'exécute dans la portée d'une transaction unique.

Voir aussi

Tâches

Comment : ouvrir un test unitaire de base de données à modifier

Concepts

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

Vérification du code de base de données à l'aide de tests unitaires