Compartilhar via


Como criar um teste de unidade orientado a dados

Usando a estrutura de teste da unidade da Microsoft para o código gerenciado, você pode configurar um método de teste de unidade para recuperar os valores usados no método de teste de uma fonte de dados.O método é executado sucessivamente para cada linha na fonte de dados, o que facilita testar uma variedade de entrada usando um único método.

Este tópico contém as seções a seguir:

Criar um teste controladas por dados de unidade envolve as seguintes etapas:

  1. Criar uma fonte de dados que contém os valores que você usa no método de teste.A fonte de dados pode ser qualquer tipo que seja registrado no computador que executa o teste.

  2. Adicione um campo privado de TestContext e uma propriedade pública de TestContext à classe de teste.

  3. Crie um método de teste da unidade e adicionar um atributo de DataSourceAttribute .

  4. Use a propriedade do indicador de DataRow para recuperar os valores usados em um teste.

O método no teste

Como exemplo, vamos assumem criadas:

  1. Uma solução MyBank que chamou aceitasse e processa transações para diferentes tipos de contas.

  2. Um projeto em MyBank chamou BankDb que gerencia as transações de contas.

  3. Uma classe chamada Maths no projeto de DbBank executando as funções matemáticas para garantir que todas as transações é vantajosa ao banco.

  4. Um projeto de teste da unidade chamada BankDbTests para testar o comportamento do componente de BankDb .

  5. Uma classe de teste da unidade chamada MathsTests para verificar o comportamento da classe de Maths .

Nós testaremos um método em Maths que adiciona dois inteiros usando um loop:

public int AddIntegers(int first, int second)
{
    int sum = first;
    for( int i = 0; i < second; i++)
    {
        sum += 1;
    }
    return sum;
}

Criando uma fonte de dados

Para testar o método de AddIntegers , criarmos uma fonte de dados que especifica um intervalo de valores para os parâmetros e a soma que você espera ser retornado.Em nosso exemplo, criamos um compact MathsData nomeado base de dados do SQL e uma tabela denominada AddIntegersData que contém os seguintes nomes de coluna e valores

FirstNumber

SecondNumber

Sum

0

1

1

1

1

2

2

-3

-1

Adicionando um TestContext à classe de teste

A estrutura de teste da unidade cria um objeto de TestContext para armazenar informações da fonte de dados para um teste controlada por dados.A estrutura defina este objeto como o valor da propriedade de TestContext criadas.

    private TestContext testContextInstance;
    public TestContext TestContext
    {
        get { return testContextInstance; }
        set { testContextInstance = value; }
    }

Em seu método de teste, você acessa os dados através da propriedade do indicador de DataRow de TestContext.

Gravando o método de teste

O método de teste para AddIntegers é bem simples.Para cada linha na fonte de dados, nós chamamos AddIntegers com os valores da coluna de FirstNumber e de SecondNumber como parâmetros, e nós verifique o valor de retorno em relação ao valor da coluna de Soma :

    [DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0; Data Source=C:\Data\MathsData.sdf;", "Numbers")]
    [TestMethod()]
    public void AddIntegers_FromDataSourceTest()
    {
        var target = new Maths();
        
        // Access the data
        int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);
        int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]); 
        int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);
        int actual = target.IntegerMethod(x, y);
        Assert.AreEqual(expected, actual,
            "x:<{0}> y:<{1}>",
            new object[] {x, y});

    }

Observe que o método de Assert inclui uma mensagem que exibe os valores de x e de y de uma iteração com falha.Por padrão, os valores disputados, expected e actual, já estão incluídos nos detalhes de um teste com falha.

Especificando o DataSourceAttribute

O atributo de DataSource especifica a cadeia de conexão para a fonte de dados e o nome da tabela que você usa no método de teste.As informações exatas na cadeia de conexão diferente, dependendo do tipo de fonte de dados que você está usando.Neste exemplo, usamos uma base de dados de SqlServerCe.

    [DataSource(@"Provider=Microsoft.SqlServerCe.Client.4.0;Data Source=C:\Data\MathsData.sdf", "AddIntegersData")]

O atributo de origem de dados tem três construtores.

[DataSource(dataSourceSettingName)]

Um construtor com um parâmetro usa informações de conexão armazenadas no arquivo app.config para a solução.dataSourceSettingsName é o nome do elemento XML No arquivo de configuração que especifica informações de conexão.

Usar um arquivo app.config permite alterar o local da fonte de dados sem fazer alterações no teste de unidade próprias.Para obter informações sobre como criar e usar um arquivo app.config, consulte Instruções passo a passo: usando um arquivo de configuração para definir uma fonte de dados

[DataSource(connectionString, tableName)]

O construtor de DataSource com dois parâmetros especifica a cadeia de conexão para a fonte de dados e o nome da tabela que contém os dados para o método de teste.

As cadeias de conexão dependem do tipo de fonte de dados, mas deve conter um elemento do provedor que especifica o nome invariável do provedor de dados.

[DataSource(
    dataProvider, 
    connectionString, 
    tableName,
    dataAccessMethod
    )]

Usando TestContext.DataRow para acessar os dados

Para acessar os dados em AddIntegersData tabela, use o indicador de TestContext.DataRow .DataRow é um objeto de DataRow portanto, recuperamos valores de coluna por índice ou pelos nomes de coluna.Como os valores são retornados como objetos, precisamos do no tipo apropriado:

int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);

Executando o teste e exibir os resultados

Quando você terminar de escrever um método de teste, para criar o projeto de teste.O método de teste é exibida em A janela explorador de teste no grupo de Não Executar Testes .Como você executa, grave, e executar novamente os testes, exibe explorador de teste os resultados em grupos de Testes com falha, Testes Aprovados, e Não Executar Testes.Você pode escolher Executar Tudo para executar todos os testes, ou escolher Executar… para escolher um subconjunto de teste para executar.

A barra dos resultados da análise na parte superior do gerenciador é animada como seus execuções de teste.Ao término de execução do teste, a barra verde será se todos os testes passaram ou vermelho se algum dos testes falharam.Um resumo de execução do teste é exibida no painel de detalhes na parte inferior de A janela explorador de teste.Selecione um teste para exibir os detalhes desse teste no painel inferior.

Se você executou o método de AddIntegers_FromDataSourceTest em nosso exemplo, a barra de resultados gerencia o vermelho e o método de teste é movido para testar controladas por dados de A Testes com falha falhará se qualquer um dos métodos iterados da fonte de dados falham.Quando você escolhe um teste controlada por dados com falha em A janela explorador de teste, o painel de detalhes exibe os resultados de cada iteração que é identificada pelo índice da linha de dados.Em nosso exemplo, parece que o algoritmo de AddIntegers não lida com valores negativos corretamente.

Quando o método no teste é fixo e a repetição de teste, a barra de resultados gerencia o verde e o método de teste é movido para o grupo de Teste passado .

Consulte também

Referência

DataSourceAttribute

TestContext

TestContext.DataRow

Assert

Conceitos

Verificando código usando testes de unidade

Escrevendo testes de unidade para .NET Framework com o Microsoft Unit Test Framework para código gerenciado

Outros recursos

Como: criar e executa um teste de unidade

Executando testes de unidade com o Gerenciador de Testes