Compartilhar via


Passo a passo: usando um arquivo de configuração para definir uma fonte de dados

Este passo a passo ilustra como usar uma fonte de dados definida em um arquivo app.config para teste de unidade. Você aprenderá a criar um arquivo app.config que define uma fonte de dados que pode ser usada pela classe DataSourceAttribute. As tarefas apresentadas neste passo a passo incluem o seguinte:

  • Criando um arquivo app.config.

  • Definindo uma seção de configuração personalizada.

  • Definindo cadeias de conexão.

  • Definindo as fontes de dados.

  • Acessando as fontes de dados usando a classe DataSourceAttribute.

Nota

No momento, o DataSourceAttribute só tem suporte no .NET Framework.

Pré-requisitos

Para concluir este passo a passo, você precisa:

  • Visual Studio Enterprise

  • Microsoft Access ou Microsoft Excel para fornecer dados para, pelo menos, um dos métodos de teste.

  • Uma solução do Visual Studio que contém um projeto de teste.

Adicionar um arquivo app.config ao projeto

  1. Se o projeto de teste já tiver um arquivo app.config, vá para Definir uma seção de configuração personalizada.

  2. Clique com o botão direito do mouse em seu projeto de teste no Gerenciador de Soluções e, em seguida, selecione Adicionar>Novo Item.

    A janela Adicionar Novo Item é aberta. Se você não vir todos os modelos de item, escolha Mostrar Todos os Modelose escolha o modelo de item.

  3. Selecione o modelo do Arquivo de Configuração do Aplicativo e clique em Adicionar.

Definir uma seção de configuração personalizada

Examine o arquivo de app.config. Ele contém pelo menos a declaração XML e um elemento raiz.

Para adicionar a seção de configuração personalizada ao arquivo app.config

  1. O elemento raiz de app.config deve ser o elemento de configuração. Crie um elemento configSections dentro do elemento configuration. O configSections deve ser o primeiro elemento no arquivo app.config.

  2. Dentro do elemento configSections, crie um elemento section.

  3. Na seção elemento, adicione um atributo chamado name e atribua a ele um valor de microsoft.visualstudio.testtools. Adicione outro atributo chamado type e atribua a ele um valor de Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.

O elemento da seção deve ser semelhante a este:

<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />

Nota

O nome do assembly deve corresponder à versão que você está usando.

Definir cadeias de conexão

As cadeias de conexão definem informações específicas do provedor para acessar fontes de dados. As cadeias de conexão definidas nos arquivos de configuração fornecem informações reutilizáveis do provedor de dados em um aplicativo. Nesta seção, você criará duas cadeias de conexão que serão usadas por fontes de dados definidas na Seção de Configuração Personalizada.

Cuidado

A cadeia de conexão pode conter dados confidenciais (por exemplo, uma senha). A cadeia de conexão é armazenada em texto sem formatação no código-fonte e no assembly compilado. Restrinja o acesso ao código-fonte e ao assembly para proteger essas informações confidenciais.

Para definir cadeias de conexão

  1. Depois do elemento configSections, crie um elemento connectionStrings.

  2. Dentro do elemento connectionStrings, crie dois elementos add.

  3. No primeiro elemento add, crie os seguintes atributos e valores para uma conexão com um banco de dados do Microsoft Access:

Atributo Valores
name "MyJetConn"
connectionString "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;"
providerName "System.Data.OleDb"

No segundo elemento add, crie os seguintes atributos e valores para uma conexão com uma planilha do Microsoft Excel:

Atributo Valores
name "MyExcelConn"
connectionString "Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5"
providerName "System.Data.Odbc"

O elemento connectionStrings deve ser semelhante a este:

<connectionStrings>
    <add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
    <add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>

Definir fontes de dados

A seção de fontes de dados contém quatro atributos usados pelo mecanismo de teste para recuperar dados de uma fonte de dados.

  • name define a identidade usada pelo DataSourceAttribute para especificar qual fonte de dados usar.

  • connectionString identifica a cadeia de conexão criada na seção Definir Cadeias de Conexão anterior.

  • dataTableName define a tabela ou a planilha que contém os dados a serem usados no teste.

  • dataAccessMethod define a técnica para acessar valores de dados na fonte de dados.

Nesta seção, você definirá duas fontes de dados a serem usadas em um teste de unidade.

Para definir fontes de dados

  1. Após o elemento connectionStrings, crie um elemento microsoft.visualstudio.testtools. Esta seção foi criada na Seção Definir uma Configuração Personalizada.

  2. Dentro do elemento microsoft.visualstudio.testtools, crie um elemento dataSources.

  3. Dentro do elemento dataSources, crie dois elementos add.

  4. No primeiro , adicione o elemento, crie os seguintes atributos e valores para uma fonte de dados do Microsoft Access:

Atributo Valores
name "MyJetDataSource"
connectionString "MyJetConn"
dataTableName "MyDataTable"
dataAccessMethod "Sequential"

No segundo elemento adicionado, crie os seguintes atributos e valores para uma fonte de dados do Microsoft Excel:

Atributo Valores
Name "MyExcelDataSource"
connectionString "MyExcelConn"
dataTableName "Sheet1$"
dataAccessMethod "Sequential"

O elemento microsoft.visualstudio.testtools deve ser parecido com este:

<microsoft.visualstudio.testtools>
    <dataSources>
        <add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
        <add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
    </dataSources>
</microsoft.visualstudio.testtools>

O arquivo de app.config final deve ser semelhante a este:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
    </configSections>
    <connectionStrings>
        <add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
        <add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
    </connectionStrings>
    <microsoft.visualstudio.testtools>
        <dataSources>
            <add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
            <add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
        </dataSources>
    </microsoft.visualstudio.testtools>
</configuration>

Criar um teste de unidade que usa fontes de dados definidas em app.config

Agora que um arquivo app.config foi definido, você criará um teste de unidade que usa dados localizados nas fontes de dados definidas no arquivo app.config. Nesta seção, vamos:

  • Crie as fontes de dados encontradas no arquivo app.config.

  • Use as fontes de dados em dois métodos de teste que comparam os valores em cada fonte de dados.

Para criar uma fonte de dados do Microsoft Access

  1. Crie um banco de dados do Microsoft Access chamado testdatasource.accdb.

  2. Crie uma tabela e nomeie-a MyDataTable em testdatasource.accdb.

  3. Crie dois campos em MyDataTable nomeados Arg1 e Arg2 usando o tipo de dados Number.

  4. Adicione cinco entidades a MyDataTable com os seguintes valores para Arg1 e Arg2, respectivamente: (10,50), (3,2), (6,0), (0,8) e (12312.1000).

  5. Salve e feche o banco de dados.

  6. Altere a cadeia de conexão para apontar para o local do banco de dados. Altere o valor de Data Source para refletir a localização do banco de dados.

Para criar uma fonte de dados do Microsoft Excel

  1. Criar uma planilha do Microsoft Excel chamada data.xlsx.

  2. Crie uma planilha chamada Sheet1 se ela ainda não existir no data.xlsx.

  3. Crie dois cabeçalhos de coluna e nomeie-os Val1 e Val2 em Sheet1.

  4. Adicione cinco entidades a Sheet1 com os seguintes valores para Val1 e Val2, respectivamente: (1,1), (2,2), (3,3), (4,4) e (5,0).

  5. Salve e feche a planilha.

  6. Altere a cadeia de conexão para apontar para o local da planilha. Altere o valor de dbq para refletir o local da planilha.

Para criar um teste de unidade usando as fontes de dados app.config

  1. Adicione um teste de unidade ao projeto de teste.

  2. Substitua o conteúdo gerado automaticamente do teste de unidade pelo seguinte código:

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace TestProject1
    {
         [TestClass]
        public class UnitTest1
        {
            private TestContext context;
    
            public TestContext TestContext
            {
                get { return context; }
                set { context = value; }
            }
    
            [TestMethod()]
            [DeploymentItem("MyTestProject\\testdatasource.accdb")]
            [DataSource("MyJetDataSource")]
            public void MyTestMethod()
            {
                int a = Int32.Parse(context.DataRow["Arg1"].ToString());
                int b = Int32.Parse(context.DataRow["Arg2"].ToString());
                Assert.AreNotEqual(a, b, "A value was equal.");
            }
    
            [TestMethod()]
            [DeploymentItem("MyTestProject\\data.xlsx")]
            [DataSource("MyExcelDataSource")]
            public void MyTestMethod2()
            {
                Assert.AreEqual(context.DataRow["Val1"], context.DataRow["Val2"]);
            }
        }
    }
    
  3. Examine os atributos DataSource. Observe os nomes de configuração do arquivo app.config.

  4. Crie sua solução e execute testes MyTestMethod e MyTestMethod2.

Importante

Implante itens como fontes de dados para que eles possam ser acessados para o teste no diretório de implantação.