Partager via


Comment : ajouter une condition de test au Concepteur de test unitaire de base de données

Mise à jour : novembre 2007

La classe TestCondition utilisée pour créer des conditions de test est complètement extensible. 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. Ajoutez une référence à l'assembly suivant :

    • Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.dll.

    Pour ajouter ce fichier, vous devez parcourir l'arborescence jusqu'à [Program Files]\Microsoft Visual Studio 9.0\DBPro, où [Program Files] représente votre dossier Program Files.

  3. Dérivez votre classe de la classe TestCondition, comme illustré dans l'exemple de code suivant :

    using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.Conditions;
    using System.ComponentModel;
    
    [DisplayName("NewTestCondition")]
    public class NewTestCondition:TestCondition
    {
       // Additional implementation to be added here
    }
    
  4. Signez l'assembly avec un nom fort. Pour plus d'informations, consultez Comment : signer un assembly avec un nom fort.

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

  6. Ajoutez l'assembly au Global Assembly Cache en utilisant gacutil /i. Pour plus d'informations, consultez Outil Global Assembly Cache Tool (Gacutil.exe).

    Remarque :

    Avant d'exécuter la commande gacutil, exécutez-la à l'aide de la fenêtre d'invite de commandes dans Visual Studio 2005. Pour ouvrir cette fenêtre, cliquez sur Démarrer, pointez sur Tous les programmes, puis sur Microsoft Visual Studio 2005, et cliquez sur Visual Studio Tools. Si vous utilisez la fenêtre d'invite de commandes standard, vous devez modifier la variable d'environnement PATH pour pointer vers l'emplacement de gacutil.exe. En général, cet emplacement est [Program Files]\Microsoft Visual Studio 9.0\SDK\v2.0\Bin.

  7. Enregistrez la nouvelle condition de test. Pour plus d'informations, consultez Comment : enregistrer une nouvelle condition de test.

Exemple

Dans cet exemple, vous créez une condition de test simple qui vérifie que le nombre de colonnes retourné dans le ResultSet est le résultat que vous attendez. Vous pouvez utiliser cette condition pour vous assurer que le contrat relatif à une procédure stockée est correct.

//ResultSetColumnCountCondition
//Sample custom test condition
//

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.Common;
using System.ComponentModel;
using System.ComponentModel.Design;
using TestTools = Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting;
using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.Conditions;

namespace MyTestConditions
{
    [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 TestTools.AssertFailedException(String.Format("Batch {0} does not exist", _batch));

            ExecutionResult result = results[_batch - 1];

            //verify resultset exists
            if (result.DataSet.Tables.Count < ResultSet)
                throw new TestTools.AssertFailedException(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 TestTools.AssertFailedException(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é. Ils peuvent 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 cette méthode pour valider 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é. Dans cette version, un seul lot par script de test est pris en charge. Par conséquent, la condition de test examinera 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 : enregistrer une nouvelle condition de test