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
Se o projeto de teste já tiver um arquivo app.config, vá para Definir uma seção de configuração personalizada.
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.
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
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.
Dentro do elemento configSections, crie um elemento section.
Na seção elemento, adicione um atributo chamado
name
e atribua a ele um valor demicrosoft.visualstudio.testtools
. Adicione outro atributo chamadotype
e atribua a ele um valor deMicrosoft.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
Depois do elemento configSections, crie um elemento connectionStrings.
Dentro do elemento connectionStrings, crie dois elementos add.
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
Após o elemento connectionStrings, crie um elemento microsoft.visualstudio.testtools. Esta seção foi criada na Seção Definir uma Configuração Personalizada.
Dentro do elemento microsoft.visualstudio.testtools, crie um elemento dataSources.
Dentro do elemento dataSources, crie dois elementos add.
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
Crie um banco de dados do Microsoft Access chamado testdatasource.accdb.
Crie uma tabela e nomeie-a
MyDataTable
em testdatasource.accdb.Crie dois campos em
MyDataTable
nomeadosArg1
eArg2
usando o tipo de dadosNumber
.Adicione cinco entidades a
MyDataTable
com os seguintes valores paraArg1
eArg2
, respectivamente: (10,50), (3,2), (6,0), (0,8) e (12312.1000).Salve e feche o banco de dados.
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
Criar uma planilha do Microsoft Excel chamada data.xlsx.
Crie uma planilha chamada
Sheet1
se ela ainda não existir no data.xlsx.Crie dois cabeçalhos de coluna e nomeie-os
Val1
eVal2
emSheet1
.Adicione cinco entidades a
Sheet1
com os seguintes valores paraVal1
eVal2
, respectivamente: (1,1), (2,2), (3,3), (4,4) e (5,0).Salve e feche a planilha.
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
Adicione um teste de unidade ao projeto de teste.
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"]); } } }
Examine os atributos DataSource. Observe os nomes de configuração do arquivo app.config.
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.