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 testes de unidade. Você aprenderá a criar um arquivo app.config que define uma fonte de dados que possa ser usada pela classe DataSourceAttribute. As tarefas ilustradas nesta explicação passo a passo incluem o seguinte:
Criar um arquivo app.config.
Definindo uma seção de configuração personalizada.
Definindo as cadeias de conexão.
Definindo as fontes de dados.
Acessando as fontes de dados usando a classe DataSourceAttribute.
Observação
No momento, há suporte para DataSourceAttribute somente no .NET Framework.
Pré-requisitos
Para concluir esta explicação passo a passo, será necessário:
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 contenha um projeto de teste.
Adicionar um arquivo app.config ao projeto
Se o projeto de teste já tem um arquivo app.config, vá para Definir uma seção de configuração personalizada.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto de teste e, em seguida, selecione Adicionar>Novo Item.
A janela Adicionar Novo Item é aberta. Caso você não veja todos os modelos de item, escolha Mostrar todos os modelos e escolha o modelo de item.
Selecione o modelo de Arquivo de Configuração de 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.
Como adicionar a seção de configuração personalizada para o arquivo app.config
O elemento raiz de app.config deve ser o elemento configuration. 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.
No elemento section, adicione um atributo chamado
name
e atribua a ele um valor igual amicrosoft.visualstudio.testtools
. Adicione outro atributo chamadotype
e atribua a ele um valor igual aMicrosoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
.
O elemento section deverá ser parecido com este:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
Observação
O nome do assembly precisa corresponder à versão que está sendo usada.
Definir cadeias de conexão
As cadeias de conexão definem as 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 do provedor de dados reutilizáveis em um aplicativo. Nesta seção, você criará duas cadeias de conexão que serão usadas por fontes de dados que são 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.
Como definir as cadeias de conexão
Após o 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 parecido com 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 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 será usada.connectionString
identifica a cadeia de conexão criada na seção anterior Definir cadeias de conexão.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 para usar em um teste de unidade.
Como 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 elemento add, 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 add, 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 app.config final deve ser parecido com 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 os dados localizados nas fontes de dados definidas no arquivo app.config. Nesta seção, iremos:
Criar as fontes de dados localizadas no arquivo app.config.
Usar as fontes de dados em dois métodos de teste que comparam os valores em cada fonte de dados.
Como criar uma fonte de dados do Microsoft Access
Criar 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
chamadosArg1
eArg2
usando o tipo de dadosNumber
.Adicione cinco entidades em
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 o local do banco de dados.
Como criar uma fonte de dados do Microsoft Excel
Crie uma planilha do Microsoft Excel chamada data.xlsx.
Crie uma planilha chamada
Sheet1
, caso ela ainda não exista em data.xlsx.Crie dois cabeçalhos de coluna e nomeie-os como
Val1
eVal2
emSheet1
.Adicione cinco entidades em
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.
Como criar um teste de unidade usando fontes de dados app.config
Adicione um teste de unidade ao projeto de teste.
Substitua o conteúdo do teste de unidade gerado automaticamente pelo código a seguir:
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.
Compile sua solução e execute testes MyTestMethod e MyTestMethod2.
Importante
Implante itens como fontes de dados para que fiquem acessíveis para o teste no diretório de implantação.