Partilhar 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á como 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.

  • Definição de cadeias de conexão.

  • Definição das fontes de dados.

  • Acessando as fontes de dados usando a classe DataSourceAttribute.

Observação

Atualmente, DataSourceAttribute é suportado apenas 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 de app.config ao projeto

  1. Se o seu 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 selecione Adicionar>Novo Item.

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

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

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

Examine o arquivo 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 de de configuração. O configSections deve ser o primeiro elemento no ficheiro app.config.

  2. Dentro do elemento configSections, crie um elemento seção.

  3. Na seção elemento, adicione um atributo chamado name e atribua-lhe um valor de microsoft.visualstudio.testtools. Adicione outro atributo chamado type e atribua-lhe 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" />

Observação

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 em arquivos de configuração fornecem informações reutilizáveis do provedor de dados em um aplicativo. Nesta seção, você cria duas cadeias de conexão que serão usadas por fontes de dados definidas na Seção Configuração Personalizada.

Atenção

A cadeia de conexão pode conter dados confidenciais (por exemplo, uma senha). A cadeia de conexão é armazenada em texto simples 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 adicionar.

  3. No primeiro elemento a adicionar, crie os seguintes atributos e valores para uma conexão com uma base de dados 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 adicionado ao, crie os seguintes atributos e valores para uma conexão com uma folha de cálculo 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 fontes de dados contém quatro atributos que são 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 anterior Definir cadeias de conexão.

  • dataTableName define a tabela ou folha 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 para usar em um teste de unidade.

Para definir fontes de dados

  1. Depois do elemento connectionStrings, crie um elemento microsoft.visualstudio.testtools. Esta seção foi criada em Definir uma seção de configuração personalizada.

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

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

  4. No primeiro elemento adicionar, 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 da Microsoft Excel:

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

O elemento microsoft.visualstudio.testtools deve ser semelhante a 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 no 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 secção, iremos:

  • 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, respetivamente: (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 o local do banco de dados.

Para criar uma fonte de dados do Microsoft Excel

  1. Crie 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, respetivamente: (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 os testes MyTestMethod e MyTestMethod2.

Importante

Implante itens como fontes de dados para que eles sejam acessíveis ao teste no diretório de implantação.