Como criar um teste de unidade orientado a dados

Usando o Microsoft framework de teste de unidade para 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 torna mais fácil de testar uma variedade de entrada usando um único método.

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

Criar um teste de unidade orientado a dados envolve as seguintes etapas:

  1. Crie uma fonte de dados que contém os valores que você usar o método de teste.A fonte de dados pode ser qualquer tipo que está registrado na máquina que executa o teste.

  2. Adicionar um particular TestContext campo e um público TestContext propriedade para a classe de teste.

  3. Criar um método de teste de unidade e adicionar um DataSourceAttribute de atributo a ele.

  4. Use o DataRow propriedade indexador para recuperar os valores que você usa em um teste.

O método de teste

Por exemplo, vamos supor que criamos:

  1. Solução chamada MyBank que aceita e processa transações para diferentes tipos de contas.

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

  3. Uma classe chamada Maths na DbBank projeto executa as funções matemáticas para garantir que qualquer transação seja vantajosa para o banco.

  4. Um teste de unidade projeto chamado BankDbTests para testar o comportamento de BankDb componente.

  5. Um teste de unidade classe chamada MathsTests para verificar o comportamento do Maths classe.

Testamos 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 AddIntegers método, podemos criar uma fonte de dados que especifica um intervalo de valores para os parâmetros e a soma que esperam a ser retornado.Em nosso exemplo, podemos criar um banco de dados Sql Compact chamado MathsData e uma tabela denominada AddIntegersData que contém os seguintes nomes de coluna e valores

FirstNumber

SecondNumber

Soma

0

1

1

1

1

2

2

-3

-1

Adicionando um TestContext para a classe de teste

A teste de unidade do framework cria um TestContext o objeto para armazenar as informações de fonte de dados para um teste orientado a dados.A estrutura define esse objeto como o valor da TestContext propriedade que criamos.

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

No método de teste, você acessar dados por meio de DataRow propriedade do indexador do TestContext.

O método de teste de escrita

O método de teste para AddIntegers é bastante simples.Para cada linha na fonte de dados, podemos chamar AddIntegers com o FirstNumber e SecondNumber coluna valores como parâmetros e verificamos o valor de retorno contra soma o valor da coluna:


    [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 Assert método inclui uma mensagem que exibe o x e y valores de uma iteração com falha.Por padrão, os valores confirmados, expected e actual, já estão incluídos nos detalhes de uma falha de teste.

ms182527.collapse_all(pt-br,VS.110).gifEspecificando o DataSourceAttribute

O DataSource atributo especifica a seqüência de conexão para a fonte de dados e o nome da tabela que você use o método de teste.A informação exata na seqüência de conexão varia, dependendo do tipo de fonte de dados que você está usando.Neste exemplo, usamos um banco de dados SqlServerCe.

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

O atributo DataSource 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.O dataSourceSettingsName é o nome do elemento Xml no arquivo de configuração que especifica as informações de conexão.

Usando um arquivo app. config permite que você altere o local da fonte de dados sem fazer alterações para o teste de unidade.Para obter informações sobre como criar e usar um arquivo app. config, consultePasso a passo: Usando um arquivo de configuração para definir uma fonte de dados

[DataSource(connectionString, tableName)]

O DataSource construtor com dois parâmetros Especifica a seqüência 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 seqüências de conexão dependem do tipo do tipo de fonte de dados, mas ele deve conter um elemento de provedor que especifica o nome invariável do provedor de dados.

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

ms182527.collapse_all(pt-br,VS.110).gifUsando propriedades TestContext. DataRow para acessar os dados

Para acessar os dados de AddIntegersData tabela, use o TestContext.DataRow indexador.DataRowé um DataRow objeto, podemos recuperar os valores de coluna por nomes de índice ou coluna.Porque os valores são retornados como objetos, precisamos convertê-los para o tipo apropriado:

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

Execução do teste e exibir os resultados

Quando tiver terminado de escrever um método de teste, crie o projeto de teste.O método de teste aparece na janela Test Explorer no Não executar testes grupo.Como executar, gravar e executar novamente os testes, Test Explorer exibe os resultados em grupos de Falha testes, Testes passados, e Não executar testes.Você pode escolher Executar todas as para executar todos os testes, ou Executar... para escolher um subconjunto dos testes a serem executados.

Na barra de resultados de teste na parte superior do Explorer é animada como o teste é executado.No final da execução do teste, a barra será se todos os testes passaram de verde ou vermelho se qualquer um dos testes falharam.Um resumo da execução do teste aparece no painel de detalhes na parte inferior da janela Test Explorer.Selecione um teste para exibir os detalhes desse teste no painel inferior.

Se você executou o AddIntegers_FromDataSourceTest método em nosso exemplo, na barra de resultados vermelhos e o método de teste é movido para o Falha testes um teste orientado a dados falhará se qualquer um dos métodos repetidos de dados de origem falha.Quando você escolhe um teste orientado a dados com falha na janela Test Explorer, painel de detalhes exibe os resultados de cada iteração é identificado pelo índice de linha de dados.Em nosso exemplo, parece que o AddIntegers algoritmo não manipula corretamente os valores negativos.

Quando o método de teste é corrigido e o teste novamente, na barra de resultados fica verde e o método de teste é movido para o Passado teste grupo.

Consulte também

Referência

Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

Microsoft.VisualStudio.TestTools.UnitTesting.TestContext

TestContext.DataRow

Microsoft.VisualStudio.TestTools.UnitTesting.Assert

Conceitos

Verificando o código usando testes de unidade

Escrever testes de unidade para o.NET Framework com a estrutura de teste de unidade da Microsoft para código gerenciado

Outros recursos

Como: criar e executa um teste de unidade

Executando testes de unidade com Test Explorer