Compartir a través de


Cómo: Crear condiciones de prueba para el Diseñador de pruebas unitarias de base de datos

Este tema se aplica a:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio 2010 Professional 

Visual Studio Express

El tema es aplicable El tema es aplicable El tema no es aplicable El tema no es aplicable

Puede utilizar la clase TestCondition extensible para crear nuevas condiciones de prueba. Por ejemplo, podrá crear una nueva condición de prueba que compruebe el número de columnas o los valores de un conjunto de resultados.

En el procedimiento siguiente, se explica cómo crear una condición de prueba de manera que aparezca en el Diseñador de pruebas unitarias de base de datos.

Para crear una condición de prueba

  1. En Visual Studio, cree un proyecto de biblioteca de clases.

  2. Haga clic en la opción Agregar referencia del menú Proyecto.

  3. Haga clic en la ficha .NET.

  4. En la lista Nombre de componente, seleccione Microsoft.Data.Schema.UnitTesting y Microsoft.Data.Schema y, a continuación, haga clic en Aceptar.

  5. Derive la clase de la clase TestCondition.

  6. Firme el ensamblado con un nombre seguro. Para obtener más información, vea Cómo: Firmar un ensamblado con un nombre seguro.

  7. Genere la biblioteca de clases.

  8. Para poder utilizar la nueva condición de prueba, debe copiar el ensamblado firmado en la carpeta %Archivos de programa%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\extensionesPersonalizadas, donde extensionesPersonalizadas es el nombre de la carpeta que usted o el administrador de equipo creó para los archivos XML de extensión de características.

  9. Registre la condición de prueba. Para obtener más información, vea Cómo: Registrar y administrar las extensiones de características.

Ejemplo

En este ejemplo, se crea una condición de prueba simple que comprueba que el número de columnas devueltas en el objeto ResultSet es el número esperado. Puede utilizar esta sencilla condición de prueba para asegurarse de que el contrato de un procedimiento almacenado es correcto.

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 clase para la condición de prueba personalizada hereda de la clase base TestCondition. Debido a las propiedades adicionales en la condición de prueba personalizada, los usuarios pueden configurar la condición en la ventana Propiedades después de registrarla.

En este ejemplo, se agregan dos propiedades. Los usuarios de la condición de prueba personalizada pueden utilizar la propiedad ResultSet para especificar el conjunto de resultados para el que debe comprobarse el número de columnas. A continuación, los usuarios pueden utilizar la propiedad Count para especificar el número de columnas esperado.

Se agregan tres atributos para cada propiedad:

  • El nombre de categoría, que ayuda a organizar las propiedades.

  • El nombre para mostrar de la propiedad.

  • Una descripción de la propiedad.

Se realizan algunas operaciones de validación básicas con las propiedades para comprobar que el valor de la propiedad ResultSet no es menor que 1 y que el valor de la propiedad Count es mayor que 0.

El método Assert realiza la tarea primaria de la condición de prueba. Se reemplaza el método Assert para validar el cumplimiento de la condición esperada. Este método proporciona dos parámetros:

  • El primer parámetro es la conexión de base de datos que se utiliza para validar la condición de prueba.

  • El segundo parámetro, que es más importante, es la matriz de resultados, que devuelve un solo elemento de matriz por cada lote ejecutado.

Se admite solo un lote por cada script de prueba. Por consiguiente, las condiciones de prueba siempre examinarán el primer elemento de matriz. El elemento de matriz contiene un elemento DataSet que, a su vez, contiene los conjuntos de resultados devueltos para el script de prueba. En este ejemplo, el código comprueba que la tabla de datos en el elemento DataSet contiene el número adecuado de columnas. Para obtener más información, vea DataSet.

Debe establecer la biblioteca de clases que contiene la condición de prueba que se va a firmar, lo cual puede hacer en las propiedades del proyecto en la ficha Firma.

Vea también

Tareas

Cómo: Registrar y administrar las extensiones de características

Tutorial: Utilizar una condición de prueba personalizada para comprobar los resultados de un procedimiento almacenado

Conceptos

Definir condiciones personalizadas para pruebas unitarias de base de datos