Demonstra Passo a passo: Usando uma condição de teste personalizada para verificar os resultados de um procedimento armazenado
Neste a extensão de recurso passo a passo, você criará um condição de teste, e você irá verificar sua funcionalidade criando um teste de unidade de banco de dados. O processo inclui a criação de um projeto de biblioteca de classe para a condição de teste e a assinatura e registrá-lo. Se você já tem uma condição de teste que você deseja atualizar, consulte Como: Atualizar uma condição de teste personalizada a partir de uma versão anterior.
Essa explicação passo a passo ilustra as seguintes tarefas:
Como criar uma condição de teste.
Como assinar um assembly com um nome forte.
Como adicionar as referências necessárias ao projeto.
Como criar uma extensão do recurso.
Como registrar a nova extensão de recurso.
Como testar a nova extensão de recurso.
Pré-requisitos
Você deve ter um Visual Studio Premium ou Visual Studio Ultimate instalado para concluir esta explicação passo a passo.
Criando uma condição de teste personalizada
Primeiro, você irá criar uma biblioteca de classe.
Para criar uma biblioteca de classe
Sobre o arquivo menu, clique em novo e, em seguida, clique em projeto.
No Novo projeto caixa de diálogo, em Tipos de projeto, clique em Visual C#.
Em modelos de, selecione Biblioteca de classe.
No nome caixa de texto, digite ColumnCountCondition e clique em OK.
Em seguida, você se conectará o projeto.
Para assinar o projeto.
Sobre o projeto menu, clique em Propriedades de ColumnCountCondition.
Sobre o assinatura guia, selecione o Sign the assembly caixa de seleção.
No Choose a strong name key file , clique em < New... >.
O Create Strong Name Key caixa de diálogo aparece.
No nome do arquivo de chave caixa, digite SampleKey.
Digite e confirme uma senha e clique em OK.
Quando você constrói sua solução, o arquivo de chave é usado para assinar o assembly.
No menu File, clique em Save All.
Sobre o Build menu, clique em Build Solution.
Em seguida, você adicionará as referências necessárias ao projeto.
Para adicionar referências aplicáveis ao projeto
Em Solution Explorer, selecione o projeto ColumnCountCondition.
No menu Project, escolha Add Reference.
A caixa de diálogo Add Reference é aberta.
Selecione o .NET guia.
No Nome do componente coluna, localize os seguintes componentes:
Dica
Pressione e segure a tecla CTRL enquanto clica para selecionar vários componentes.
Clique em OK depois que você tiver selecionado todos os componentes necessários.
As referências selecionadas aparecerão sob o referências o nó do projeto no Solution Explorer.
Criar a classe ResultSetColumnCountCondition
Em seguida, você renomeie Class1 como ResultSetColumnCountCondition e derivam de TestCondition. A classe ResultSetColumnCountCondition é uma condição de teste simples que verifica se o número de colunas retornado no conjunto de resultados é a esperada. Você pode usar essa condição para certificar-se de que o contrato de um procedimento armazenado está correto.
Para criar uma classe de condição de teste
Em Solution Explorer, Class1. cs com o botão direito, clique em Renomear, e digite ResultSetColumnCountCondition.cs.
Clique em Sim para confirmar a renomeação de todas as referências para Class1.
Abra o arquivo ResultSetColumnCountCondition.cs e adicione o seguinte usando as instruções no arquivo:
using System; using System.Collections.Generic; 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 ColumnCountCondition { public class ResultSetColumnCountCondition
Derive a classe de TestCondition:
public class ResultSetColumnCountCondition : TestCondition
Adicionar o DatabaseSchemaProviderCompatibilityAttribute atributo. Para obter mais informações, consulte Gerar dados de teste especializado com um gerador de dados personalizados.
[DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))] [DatabaseSchemaProviderCompatibility(null)] [DisplayName("ResultSet Column Count")] public class ResultSetColumnCountCondition : TestCondition
A condição de teste possui ambos os atributos de compatibilidade para que:
A condição é carregada quando qualquer provedor de esquema do banco de dados que herda de DatabaseSchemaProvider está presente. Ele trata a situação em que o criador de teste de unidade de banco de dados tem um contexto de provedor do esquema de banco de dados. Se você quisesse sua condição de teste para ser específico de SQL Server, em vez disso, você poderia especificar SqlDatabaseSchemaProvider.
A condição de teste é carregada quando não há nenhum provedor de esquema do banco de dados. Isso ocorre quando o teste de unidade de banco de dados carrega extensões sem um provedor de esquema do banco de dados.
Adicione o atributo DisplayName:
[DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))] [DatabaseSchemaProviderCompatibility(null)] [DisplayName("ResultSet Column Count")] public class ResultSetColumnCountCondition : TestCondition
Crie variáveis de membro:
{ private int _resultSet; private int _count; private int _batch;
Crie construtor:
public ResultSetColumnCountCondition() { _resultSet = 1; _count = 0; _batch = 1; }
Substituir o Assert método. O método inclui argumentos para IDbConnection, que representa a conexão de banco de dados, e ExecutionResult. O método usa DataSchemaException para o tratamento de erro.
//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 DataSchemaException(String.Format("Batch {0} does not exist", _batch)); ExecutionResult result = results[_batch - 1]; //verify resultset exists if (result.DataSet.Tables.Count < ResultSet) throw new DataSchemaException(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 DataSchemaException(String.Format( "ResultSet {0}: {1} columns did not match the {2} columns expected", ResultSet, table.Columns.Count, Count)); }
Adicione o seguinte método substitui o método ToString:
//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); }
Adicione as seguintes propriedades de condição de teste usando o CategoryAttribute, DisplayNameAttribute, e DescriptionAttribute atributos:
//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 } }
Seu código final deverá aparecer como segue:
using System;
using System.Collections.Generic;
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 ColumnCountCondition
{
DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))]
[DatabaseSchemaProviderCompatibility(null)]
[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
}
}
Em seguida, você criará o projeto.
Para construir o projeto.
- Sobre o Build menu, clique em Build Solution.
Em seguida, você irá coletar informações de assembly geradas no projeto, incluindo a versão, cultura e PublicKeyToken.
Para coletar informações de assembly
No Exibir menu, clique em Other Windowse em seguida, clique em Janela de comando para abrir o comando janela.
No comando janela, digite o seguinte código. Para FilePath, substitua o caminho e o nome do arquivo. dll de compilado. Inclua as aspas ao redor do caminho e nome de arquivo.
Observação Por padrão, o caminho do seu arquivo compilado. dll é YourSolutionPath\bin\Debug ou YourSolutionPath\bin\Release.
? System.Reflection.Assembly.LoadFrom(@"FilePath").FullName
Pressione Enter. A linha deverá ser semelhante a seguinte com seu PublicKeyToken específico:
"ColumnCountCondition, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn"
Notificar ou copiar essas informações de assembly; ele será usado no próximo procedimento.
Em seguida, você criará um arquivo XML usando as informações de assembly reunidas no procedimento anterior.
Para criar o arquivo XML
Em Solution Explorer, selecione o projeto ColumnCountCondition.
No menu Project, selecione Add New Item.
No modelos de painel, localize e selecione o Arquivo XML item.
No nome caixa de texto, digite ColumnCountCondition.Extensions.xml e clique no Add botão.
O arquivo de ColumnCountCondition.Extensions.xml é adicionado ao projeto no Solution Explorer.
Abra o arquivo ColumnCountCondition.Extensions.xml e atualizá-lo para coincidir com o seguinte XML. Substitua a versão, cultura e PublicKeyToken que você recuperou no procedimento anterior.
<?xml version="1.0" encoding="utf-8"?> <extensions assembly="" version="1" xmlns="urn:Microsoft.Data.Schema.Extensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd"> <extension type="ColumnCountCondition.ResultSetColumnCountCondition" assembly="ColumnCountCondition, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/> </extensions>
Sobre o arquivo menu, clique em Salvar.
Em seguida, você irá copiar as informações de assembly e o arquivo XML para o diretório de extensões. Quando Visual Studio é iniciado, ele irá identificar quaisquer extensões no diretório de 10.0\VSTSDB\Extensions de Visual Studio do programa Files%\Microsoft % subdiretórios e registrá-los para usam na sessão.
Para copiar as informações de assembly e o arquivo XML para o diretório de extensões
Crie uma nova pasta chamada CustomConditions no diretório % Visual Studio do programa Files%\Microsoft 10.0\VSTSDB\Extensions\.
Copie o arquivo de montagem de ColumnCountCondition.dll no diretório de saída, por padrão, My Documents\Visual Studio 2010\Projects\CustomConditions\CustomConditions\bin\Debug\) para o diretório de 10.0\VSTSDB\Extensions\CustomConditions de Visual Studio do programa Files%\Microsoft % que você criou.
Copie o arquivo de ColumnCountCondition.Extensions.xml (por padrão, encontrado no diretório 2010\Projects\CustomConditions\CustomConditions\ My Documents\Visual Studio) para o diretório de CustomConditions de 10.0\VSTSDB\Extensions\ de Visual Studio do programa Files%\Microsoft % que você criou.
Dica
Uma prática recomendada é colocar seus assemblies de extensão em uma pasta no diretório % Visual Studio do programa Files%\Microsoft 10.0\VSTSDB\Extensions. Isso irá ajudá-lo a identificar quais extensões foram incluídas com o produto e quais são suas criações personalizadas. Pastas também são recomendadas para organizar suas extensões em categorias específicas.
Em seguida, inicie uma nova sessão do Visual Studio e crie um projeto de banco de dados.
Para iniciar uma nova sessão de Visual Studio e crie um projeto de banco de dados
Iniciar uma segunda sessão do Visual Studio.
Sobre o arquivo menu, clique em novo e, em seguida, clique em projeto.
No Novo projeto caixa de diálogo, na lista de Modelos instalados, expanda o banco de dados nó e clique SQL Server.
No painel de detalhes, clique em Projeto de banco de dados de 2008 do SQL Server.
No nome caixa de texto, digite SampleConditionDB e clique em OK.
Em seguida, você criará um teste de unidade.
Para criar um teste de unidade de banco de dados dentro de uma nova classe de teste
No menu Test, clique em New Test.
Observação Você também pode abrir Solution Explorer, o botão direito do mouse um projeto de teste, aponte para Adde em seguida, clique em New Test.
A caixa de diálogo Add New Test aparece.
No modelos de , clique em Teste de unidade de banco de dados.
Em Nome de teste, digite SampleUnitTest.
Em Add to Test Project, clique em criar um novo projeto teste Visual C#.
Clique em OK.
A caixa de diálogo New Test Project aparece.
Digite o nome do projeto SampleUnitTest.
Clique em Cancelar para criar o teste de unidade sem configurar o projeto de teste para usar uma conexão de banco de dados.
Observação Para obter mais informações sobre como criar e configurar os testes de unidade de banco de dados com conexões de banco de dados, consulte Como: Criar um teste de unidade de banco de dados vazio.
O teste em branco aparece no Criador de teste de unidade de banco de dados. Um arquivo de código-fonte Visual C# é adicionado ao projeto de teste.
Clique em Clique aqui para criar para concluir a criação de teste de unidade.
Finalmente, você verá a exibição de condição de novo no projeto SQL Server.
Para exibir a nova condição.
No Criador de teste de unidade de banco de dados, em Condições de teste, na nome coluna, clique no teste de inconclusiveCondition1.
Clique o Excluir condição de teste botão da barra de ferramentas para remover o teste de inconclusiveCondition1.
Clique o Condições de teste lista suspensa e selecione Contagem de colunas do conjunto de resultados.
Clique o Adicionar condição de teste botão da barra de ferramentas para adicionar a condição de teste personalizada.
No Propriedades janela, configurar o Count, Enabled, e ResultSet propriedades.
Para obter mais informações, consulte Como: Adicionar condições de teste para testes de unidade de banco de dados.
Consulte também
Tarefas
Como: Criar condições de teste para o criador de teste de unidade de banco de dados
Como: Registrar e gerenciar extensões de recurso
Conceitos
Criar e definir os testes de unidade de banco de dados
Outros recursos
Gerenciando Assinatura de Assembly e Manifesto
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Dezembro de 2010 |
Feitas correções mínimas (atributos) para o código final para comentários do cliente de endereço. |
Comentários do cliente. |