Partager via


Comment : créer des conditions de test pour le concepteur de test unitaire de base de données

Cette rubrique s'applique à :

Visual Studio Ultimate

Visual Studio Premium

Visual Studio 2010 Professional 

Visual Studio Express

La rubrique s'applique La rubrique s'applique La rubrique ne s'applique pas La rubrique ne s'applique pas

Vous pouvez utiliser la classe extensible TestCondition pour définir de nouvelles conditions de test. Pourquoi pas, par exemple, créer une condition de test afin de vérifier le nombre de colonnes ou les valeurs dans un jeu de résultats ?

La procédure suivante explique comment créer une condition de test à afficher dans le Concepteur de test unitaire de base de données.

Pour créer une condition de test

  1. Dans Visual Studio, créez un projet Bibliothèque de classes.

  2. Dans le menu Projet, cliquez sur Ajouter une référence.

  3. Cliquez sur l'onglet .NET.

  4. Dans la liste Nom du composant, sélectionnez Microsoft.Data.Schema.UnitTesting et Microsoft.Data.Schema, puis cliquez sur OK.

  5. Dérivez votre classe de la classe TestCondition.

  6. Signez l'assembly avec un nom fort. Pour plus d'informations, consultez Comment : signer un assembly avec un nom fort.

  7. Générez la bibliothèque de classes.

  8. Avant de pouvoir utiliser la nouvelle condition de test, vous devez copier votre assembly signé dans le dossier %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\ExtensionsPersonnalisées, où ExtensionsPersonnalisées désigne le nom du dossier que vous (ou votre administrateur) réservez à vos fichiers XML d'extension de fonctionnalité.

  9. Enregistrez la condition de test. Pour plus d'informations, consultez Comment : inscrire et gérer des extensions de fonctionnalité.

Exemple

Cet exemple vous propose de créer une condition de test simple pour vérifier si le nombre de colonnes retourné dans le jeu de résultats est conforme à ce que vous attendez. Vous pouvez utiliser cette simple condition pour vous assurer que le contrat relatif à une procédure stockée est correct.

using System;
using System.Collections.Generic;
using TestTools = Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Data.Schema.UnitTesting;
using Microsoft.Data.Schema.UnitTesting.Conditions;
using Microsoft.Data.Schema.Extensibility;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using Microsoft.Data.Schema;
 
namespace TeamSystem.Data.Samples.DBUnitTesting
{
    [DatabaseSchemaProviderCompatibility(DspCompatibilityCategory.Any)]
    [DatabaseSchemaProviderCompatibility(DspCompatibilityCategory.None)]
    [DisplayName("ResultSet Column Count")]
    public class ResultSetColumnCountCondition : TestCondition
    {
        private int _resultSet;
        private int _count;
        private int _batch;
 
        public ResultSetColumnCountCondition()
        {
            _resultSet = 1;
            _count = 0;
            _batch = 1;
        }
 
        //method you need to override
        //to perform the condition verification
        public override void Assert(DbConnection validationConnection, ExecutionResult[] results)
        {
            //call base for parameter validation
            base.Assert(validationConnection, results);
 
            //verify batch exists
            if (results.Length < _batch)
                throw new DataException(String.Format("Batch {0} does not exist", _batch));
 
            ExecutionResult result = results[_batch - 1];
 
            //verify resultset exists
            if (result.DataSet.Tables.Count < ResultSet)
                throw new DataException(String.Format("ResultSet {0} does not exist", ResultSet));
 
            DataTable table = result.DataSet.Tables[ResultSet - 1];
 
            //actual condition verification
            //verify resultset column count matches expected
            if (table.Columns.Count != Count)
                throw new DataException(String.Format(
                    "ResultSet {0}: {1} columns did not match the {2} columns expected",
                    ResultSet, table.Columns.Count, Count));
        }
 
        //this method is called to provide the string shown in the
        //test conditions panel grid describing what the condition tests
        public override string ToString()
        {
            return String.Format(
                "Condition fails if ResultSet {0} does not contain {1} columns",
                ResultSet, Count);
        }
 
        //below are the test condition properties
        //that are exposed to the user in the property browser
        #region Properties
 
        //property specifying the resultset for which
        //you want to check the column count
        [Category("Test Condition")]
        [DisplayName("ResultSet")]
        [Description("ResultSet Number")]
        public int ResultSet
        {
            get { return _resultSet; }
 
            set
            {
                //basic validation
                if (value < 1)
                    throw new ArgumentException("ResultSet cannot be less than 1");
 
                _resultSet = value;
            }
        }
 
        //property specifying
        //expected column count
        [Category("Test Condition")]
        [DisplayName("Count")]
        [Description("Column Count")]
        public int Count
        {
            get { return _count; }
 
            set
            {
                //basic validation
                if (value < 0)
                    throw new ArgumentException("Count cannot be less than 0");
 
                _count = value;
            }
        }
 
        #endregion
    }
}

La classe de la condition de test personnalisée hérite de la classe TestCondition de base. En raison des propriétés supplémentaires associées à la condition de test personnalisée, les utilisateurs peuvent configurer la condition à partir de la fenêtre Propriétés après avoir enregistré la condition.

Dans cet exemple, vous ajoutez deux propriétés. Les utilisateurs de la condition de test personnalisée peuvent recourir à la propriété ResultSet afin de spécifier pour quel ensemble de résultats le nombre de colonnes doit être vérifié. Il leur suffit ensuite d'utiliser la propriété Count pour spécifier le nombre de colonnes attendu.

Trois attributs sont ajoutés pour chaque propriété :

  • Le nom de catégorie, qui permet d'organiser les propriétés.

  • Le nom complet de la propriété.

  • Une description de la propriété.

Une validation de base est exécutée sur les propriétés pour vérifier que la valeur de la propriété ResultSet est inférieure à un et que la valeur de la propriété Count est supérieure à zéro.

La méthode Assert exécute la tâche principale de la condition de test. Vous substituez la méthode Assert pour confirmer que la condition attendue est satisfaite. La méthode fournit deux paramètres :

  • Le premier paramètre est la connexion de base de données qui est utilisée pour valider la condition de test.

  • Le deuxième paramètre, le plus important, est le tableau de résultats qui retourne un élément de tableau unique pour chaque lot qui a été exécuté.

Seul un lot unique est pris en charge pour chaque script de test. Par conséquent, les conditions de test examineront toujours le premier élément du tableau. L'élément de tableau contient un DataSet lequel comprend les ensembles de résultats retournés pour le script de test. Dans cet exemple, le code vérifie que la table de données du DataSet contient le nombre approprié de colonnes. Pour plus d'informations, consultez DataSet.

Vous devez définir la bibliothèque de classes qui contient votre condition de test à signer, ce que vous pouvez faire dans les propriétés du projet sous l'onglet Signature.

Voir aussi

Tâches

Comment : inscrire et gérer des extensions de fonctionnalité

Procédure pas à pas : utilisation d'une condition de test personnalisée pour vérifier les résultats d'une procédure stockée

Concepts

Définir des conditions personnalisées pour les tests unitaires de base de données