Condividi tramite


Procedura: aggiungere una condizione di test alla finestra di progettazione unit test del database

Aggiornamento: novembre 2007

La classe TestCondition utilizzata per creare condizioni di test è completamente estendibile. Nella procedura seguente viene illustrato come creare una condizione di test da visualizzare nella finestra di progettazione unit test del database.

Per creare una condizione di test

  1. In Visual Studio creare un progetto Libreria di classi.

  2. Aggiungere un riferimento all'assembly seguente:

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

    Per aggiungere questo file, è necessario seguire il percorso [Programmi]\Microsoft Visual Studio 9,0\DBPro, in cui [Programmi] è la cartella Programmi in uso.

  3. Derivare la classe dalla classe TestCondition, come illustrato nell'esempio di codice seguente:

    using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.Conditions;
    using System.ComponentModel;
    
    [DisplayName("NewTestCondition")]
    public class NewTestCondition:TestCondition
    {
       // Additional implementation to be added here
    }
    
  4. Firmare l'assembly con un nome sicuro. Per ulteriori informazioni, vedere Procedura: firmare un assembly con un nome sicuro.

  5. Generare la libreria di classi.

  6. Aggiungere l'assembly alla Global Assembly Cache tramite gacutil /i. Per ulteriori informazioni, vedere Strumento Global Assembly Cache (Gacutil.exe).

    Nota:

    Prima di utilizzare il comando gacutil, eseguirlo tramite la finestra del prompt dei comandi in Visual Studio 2005. Per aprire questa finestra, fare clic su Start, scegliere Tutti i programmi, quindi Microsoft Visual Studio 2005 e infine Visual Studio Tools. Se si utilizza la finestra del prompt dei comandi standard, è necessario modificare la variabile di ambiente PATH per accedere al percorso del file gacutil.exe. In genere, il percorso è [Programmi]\Microsoft Visual Studio 9,0\SDK\v2.0\Bin.

  7. Registrare la nuova condizione di test. Per ulteriori informazioni, vedere Procedura: registrare una nuova condizione di test.

Esempio

In questo esempio, viene creata una condizione di test semplice per verificare che il numero di colonne restituito nel gruppo di risultati sia quello previsto. È possibile utilizzare questa condizione per assicurarsi che il contratto per una stored procedure sia corretto.

//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 per la condizione di test personalizzata eredita dalla classe base condizione di test. A causa delle proprietà aggiuntive presenti nella condizione di test personalizzata, gli utenti una volta registrata tale condizione, possono configurarla nella finestraProprietà. In questo esempio, vengono aggiunte due proprietà. Gli utenti della condizione di test personalizzata possono utilizzare la proprietà ResultSet per specificare per quale gruppo di risultati il numero delle colonne deve essere verificato. Possono utilizzare la proprietà Count per specificare il numero di colonne previsto. Per ogni proprietà vengono aggiunti tre attributi:

  • Il nome della categoria, che consente di organizzare le proprietà.

  • Il nome visualizzato della proprietà.

  • Una descrizione della proprietà.

Vengono eseguite alcune convalide di base sulle proprietà per verificare che il valore della proprietà ResultSet non sia minore di uno e che il valore della proprietà Count sia maggiore di zero.

Il metodo Assert esegue l'attività principale della condizione di test. Tale metodo viene sottoposto a override per verificare che la condizione prevista sia stata soddisfatta. Questo metodo fornisce due parametri:

  • Il primo parametro è la connessione al database utilizzata per convalidare la condizione di test.

  • Il secondo e più importante parametro è la matrice dei risultati che restituisce un singolo elemento di matrice per ogni batch eseguito. In questa versione, solo un singolo batch viene supportato per ogni script di test. Pertanto, la condizione di test esaminerà sempre il primo elemento di matrice. L'elemento di matrice contiene un DataSet che, a sua volta, contiene i gruppi di risultati restituiti per lo script di test. In questo esempio, il codice verifica che la tabella dati nel DataSet contenga il numero appropriato di colonne. Per ulteriori informazioni, vedere DataSet.

È necessario impostare la libreria di classi che contiene la condizione di test da firmare. Tale operazione può essere eseguita nella scheda Firma delle proprietà del progetto.

Vedere anche

Attività

Procedura: registrare una nuova condizione di test