Tutorial: Uso de un archivo de configuración para definir un origen de datos
En este tutorial se muestra cómo usar un origen de datos definido en un archivo app.config para pruebas unitarias. Aprenderá a crear un archivo app.config que defina un origen de datos que pueda usar la clase DataSourceAttribute. Las tareas presentadas en este tutorial incluyen lo siguiente:
Crear un archivo app.config.
Definición de una sección de configuración personalizada.
Definición de cadenas de conexión.
Definir los orígenes de datos.
Acceso a los orígenes de datos mediante la clase DataSourceAttribute.
Nota
DataSourceAttribute solo se admite actualmente en .NET Framework.
Prerrequisitos
Para completar este tutorial, necesita:
Visual Studio Enterprise
Microsoft Access o Microsoft Excel para proporcionar datos para al menos uno de los métodos de prueba.
Solución de Visual Studio que contiene un proyecto de prueba.
Agregar un archivo app.config al proyecto
Si su proyecto de prueba ya tiene un archivo de app.config, vaya a Definir una sección de configuración personalizada.
Haga clic con el botón derecho en el proyecto de prueba en Explorador de solucionesy seleccione Agregar>nuevo elemento.
Se abre la ventana Agregar nuevo elemento. Si no ve todas las plantillas de elemento, elija Mostrar todas las plantillasy, a continuación, elija la plantilla de elemento.
Seleccione la plantilla de archivo de configuración de aplicaciones y haga clic en Agregar.
Definición de una sección de configuración personalizada
Examine el archivo app.config. Contiene al menos la declaración XML y un elemento raíz.
Para agregar la sección de configuración personalizada al archivo app.config
El elemento raíz de app.config debe ser el elemento de configuración . Crear un elemento configSections dentro del elemento configuration. El elemento configSections debe ser el primero en el archivo app.config.
En el elemento configSections, cree un elemento section.
En la sección elemento , agregue un atributo denominado
name
y asígnele un valor demicrosoft.visualstudio.testtools
. Agregue otro atributo denominadotype
y asígnele un valor deMicrosoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
.
El elemento section debe ser similar a este:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
Nota
El nombre del ensamblado debe coincidir con la versión que se esté usando.
Definición de cadenas de conexión
Las cadenas de conexión definen información específica del proveedor para acceder a orígenes de datos. Las cadenas de conexión definidas en los archivos de configuración proporcionan información del proveedor de datos reutilizable en una aplicación. En esta sección, creará dos cadenas de conexión que serán utilizadas por los orígenes de datos definidos en la sección de Configuración personalizada.
Cautela
La cadena de conexión puede contener datos confidenciales (por ejemplo, una contraseña). La cadena de conexión se almacena en texto sin formato en el código fuente y en el ensamblado compilado. Restrinja el acceso al código fuente y al ensamblado para proteger esta información confidencial.
Para definir cadenas de conexión
Después del elemento configSections, cree un elemento connectionStrings.
En el elemento connectionStrings, cree dos elementos add.
En el primer elemento , añada el elemento y cree los siguientes atributos y valores para una conexión a una base de datos de 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" |
En el segundo elemento , añada el elemento y cree los siguientes atributos y valores para una conexión a una hoja de cálculo de Microsoft Excel:
Atributo | Valores |
---|---|
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
El elemento connectionStrings debe tener un aspecto similar al siguiente:
<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>
Definición de orígenes de datos
La sección orígenes de datos contiene cuatro atributos que usa el motor de pruebas para recuperar datos de un origen de datos.
name
define la identidad usada por el DataSourceAttribute para especificar el origen de datos que se va a usar.connectionString
identifica la cadena de conexión creada en la sección Definir cadenas de conexión anteriores.dataTableName
define la tabla o hoja que contiene los datos que se van a usar en la prueba.dataAccessMethod
define la técnica para acceder a los valores de datos en el origen de datos.
En esta sección, definirá dos orígenes de datos para usarlos en una prueba unitaria.
Para definir orígenes de datos
Después del elemento connectionStrings, cree un elemento microsoft.visualstudio.testtools. Esta sección se creó en Definir una sección de configuración personalizada.
Dentro del elemento microsoft.visualstudio.testtools, cree un elemento dataSources .
En el elemento dataSources, cree dos elementos add.
En el primer elemento , añada el elemento y defina los siguientes atributos y valores para un origen de datos de Microsoft Access:
Atributo | Valores |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
En el segundo elemento , agregue el elemento, y cree los siguientes atributos y valores para un origen de datos de Microsoft Excel:
Atributo | Valores |
---|---|
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
El elemento microsoft.visualstudio.testtools debe tener un aspecto similar al siguiente:
<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>
El archivo app.config final debe tener un aspecto similar al siguiente:
<?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>
Crear una prueba unitaria que use orígenes de datos definidos en app.config
Ahora que se ha definido un archivo app.config, creará una prueba unitaria que use datos ubicados en los orígenes de datos definidos en el archivo app.config. En esta sección, haremos lo siguiente:
Cree los orígenes de datos que se encuentran en el archivo app.config.
Use los orígenes de datos en dos métodos de prueba que comparan los valores de cada origen de datos.
Para crear un origen de datos de Microsoft Access
Cree una base de datos de Microsoft Access denominada testdatasource.accdb.
Cree una tabla y asígnele el nombre
MyDataTable
en testdatasource.accdb.Cree dos campos en
MyDataTable
nombradosArg1
yArg2
usando el tipo de datosNumber
.Agregue cinco entidades a
MyDataTable
con los siguientes valores paraArg1
yArg2
, respectivamente: (10 50), (3,2), (6,0), (0,8) y (12312,1000).Guarde y cierre la base de datos.
Cambie la cadena de conexión para que apunte a la ubicación de la base de datos. Cambie el valor de
Data Source
para reflejar la ubicación de la base de datos.
Para crear un origen de datos de Microsoft Excel
Cree una hoja de cálculo de Microsoft Excel denominada data.xlsx.
Cree una hoja denominada
Sheet1
si aún no existe en data.xlsx.Cree dos encabezados de columna y asígneles un nombre
Val1
yVal2
enSheet1
.Agregue cinco entidades a
Sheet1
con los siguientes valores paraVal1
yVal2
, respectivamente: (1,1), (2,2), (3,3), (4,4) y (5,0).Guarde y cierre la hoja de cálculo.
Cambie la cadena de conexión para que apunte a la ubicación de la hoja de cálculo. Cambie el valor de
dbq
para reflejar la ubicación de la hoja de cálculo.
Para crear una prueba unitaria con los orígenes de datos de app.config
Agregue una prueba unitaria al proyecto de prueba.
Reemplace el contenido generado automáticamente de la prueba unitaria por el código siguiente:
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 los atributos DataSource. Observe los nombres de configuración del archivo app.config.
Compile la solución y ejecute las pruebas MyTestMethod y MyTestMethod2.
Importante
Implemente elementos como orígenes de datos para que sean accesibles para la prueba en el directorio de implementación.