Partilhar via


Como: Criar condições de teste para o criador de teste de unidade de banco de dados

Este tópico se aplica a:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio 2010 Professional 

Visual StudioExpress

O tópico é aplicável O tópico é aplicável O tópico não é aplicável O tópico não é aplicável

Você pode usar o extensible TestCondition classe para criar novos teste condições. Por exemplo, você pode criar uma nova condição de teste verifica o número de colunas ou os valores em um conjunto de resultados.

O procedimento a seguir explica como criar uma condição de teste são exibidos no criador de teste de unidade de banco de dados.

Para criar uma condição de teste

  1. Em Visual Studio, crie um projeto de biblioteca de classe.

  2. No menu Project, escolha Add Reference.

  3. Clique na .NET guia.

  4. No Nome do componente lista, selecione Microsoft.Data.Schema.UnitTesting e Microsoft.Data.Schemae em seguida, clique em OK.

  5. Derivar a classe a partir de TestCondition classe.

  6. Assine o Assembly com um nome forte. Para obter mais informações, consulte Como: Assinar um Assembly com um nome forte.

  7. Crie a biblioteca de classe.

  8. Antes de usar a nova condição de teste, você deve copiar o seu assembly assinado para 10.0\VSTSDB\Extensions\ de Visual Studio do programa Files%\Microsoft %CustomExtensions pasta, onde CustomExtensions é o nome da pasta que você ou seu administrador de computador criados para conter seus a extensão de recurso arquivos XML.

  9. Registre-se a condição de teste. Para obter mais informações, consulte Como: Registrar e gerenciar extensões de recurso.

Exemplo

Neste exemplo, você irá criar uma condição de teste simples que verifica se o número de colunas retornado no conjunto de resultados é o que você esperava. Você pode usar essa condição de teste simples para certificar-se de que o contrato de um procedimento armazenado está correto.

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
    }
}

A classe para a condição de teste personalizado herda da classe base TestCondition. Devido às propriedades adicionais sobre a condição de teste personalizada, os usuários podem configurar a condição da Propriedades janela depois que eles registraram a condição.

Neste exemplo, você pode adicionar duas propriedades. A condição de teste personalizada, os usuários podem usar o ResultSet propriedade para especificar para qual conjunto de resultados a contagem de colunas deve ser verificada. Em seguida, os usuários podem usar o Count propriedade para especificar o número de colunas esperado.

Três atributos são adicionados para cada propriedade:

  • O nome de categoria, que ajuda a organizar as propriedades.

  • O nome de exibição da propriedade.

  • Uma descrição da propriedade.

Uma validação básica é executada em Propriedades, para verificar se o valor da ResultSet propriedade não é menor que um e que o valor da Count propriedade for maior que zero.

O método Assert executa a tarefa principal da condição de teste. Você substituir o método Assert para validar que a esperada condição for atendida. Este método fornece dois parâmetros:

  • O primeiro parâmetro é a conexão de banco de dados é usada para validar a condição de teste.

  • O parâmetro do segundo e o mais importante é a matriz de resultados, que retorna um elemento de matriz única para cada lote foi executada.

Somente um único lote é oferecido por cada testar o script. Portanto, condições de teste examinará sempre o primeiro elemento da matriz. O elemento de matriz contém um conjunto de dados que, por sua vez, contém os conjuntos de resultados retornados para o script de teste. Neste exemplo, o código verificará se a tabela de dados no DataSet contém o número apropriado de colunas. Para obter mais informações, consulte DataSet.

Você deve definir a biblioteca de classe que contém a sua condição de teste a ser assinado, o que pode ser feito nas propriedades do projeto na assinatura guia.

Consulte também

Tarefas

Como: Registrar e gerenciar extensões de recurso

Demonstra Passo a passo: Usando uma condição de teste personalizada para verificar os resultados de um procedimento armazenado

Conceitos

Definir condições de personalizado para testes de unidade de banco de dados