Cómo: Agregar una condición de prueba al Diseñador de pruebas unitarias de base de datos
Actualización: noviembre 2007
La clase TestCondition que se utiliza para crear condiciones de prueba es totalmente extensible. El procedimiento siguiente 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
En Visual Studio, cree un proyecto de biblioteca de clases.
Agregue una referencia al ensamblado siguiente:
- Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.dll.
Para agregar este archivo, debe ir a [Archivos de programa]\Microsoft Visual Studio 9,0\DBPro, donde [Archivos de programa] representa su carpeta Archivos de programa.
Derive la clase de la clase TestCondition, como se muestra en el siguiente ejemplo de código:
using Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.Conditions; using System.ComponentModel; [DisplayName("NewTestCondition")] public class NewTestCondition:TestCondition { // Additional implementation to be added here }
Firmar un ensamblado con un nombre seguro Para obtener más información, vea Cómo: Firmar un ensamblado con un nombre seguro.
Genere la biblioteca de clases.
Agregue el ensamblado a la memoria caché de ensamblados global utilizando gacutil /i. Para obtener más información, vea Herramienta Caché de ensamblados global (Gacutil.exe).
Nota: Antes de ejecutar el comando gacutil, ejecútelo desde la ventana del símbolo del sistema en Visual Studio 2005. Para abrir esta ventana, haga clic en Inicio, elija Todos los programas, elija Microsoft Visual Studio 2005 y, a continuación, haga clic en Herramientas de Visual Studio. Si utiliza la ventana Símbolo del sistema estándar, debe editar la variable de entorno PATH para que señale a la ubicación de gacutil.exe. Normalmente, esta ubicación es [Archivos de programa]\Microsoft Visual Studio 9,0\SDK\v2.0\Bin.
Registre la nueva condición de prueba. Para obtener más información, vea Cómo: Registrar una nueva condición de prueba.
Ejemplo
En este ejemplo, se crea una condición de prueba simple que comprueba que el número de columnas devueltas en el conjunto de resultados es el número esperado. Puede utilizar esta condición para asegurarse de que el contrato para un procedimiento almacenado es correcto.
//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 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. 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.
En las propiedades se realiza una validación básica 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. Este método se invalida 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 el más importante, es la matriz de resultados, que devuelve un solo elemento de matriz por cada lote ejecutado. En esta versión, sólo se admite un lote único por cada script de prueba. Por consiguiente, la condición de prueba siempre examinará 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.