Pruebas unitarias: Orígenes de datos para alimentar las pruebas
En algunas ocasiones, para poder probar de forma completa un módulo es necesario probar muchas variantes en los parámetros de entrada.
Por ejemplo, si tenemos nuestra ya famoso método Sumar, con podría interesar probar el método con diferentes parámetros de entrada, para comprobar que realmente suma bien en todas las situaciones.
Una primera aproximación podría ser escribir tantas pruebas como necesitemos, cambiando en cada prueba los parámetros de entrada. Una solución poco adecuada.
La solución, más adecuada, cuando las N pruebas sólo cambian en los datos de entrada, es usar la característica que nos ofrece Visual Studio para generar una única prueba y cargar los diferentes escenarios de datos desde un origen de datos.
El proceso para configurar un origen de datos para una prueba es muy sencillo. Desde la ventana que muestra la lista de pruebas unitarias de la solución, seleccionaremos la prueba unitaria que nos interese.
Una vez seleccionada podremos ver sus propiedades. A través de la propiedad “Data Connection String” podremos especificar el origen de datos.
Si pinchamos sobre esta opción nos aparecerá un asistente que nos guiará paso a paso para especificar el origen de datos, que puede ser una base de datos, un fichero CSV o un fichero XML.
Seleccionamos un fichero CSV que tiene tres valores separados por comas. Los dos primeros son los valores a sumar, siendo el tercero el resultado esperado.
Una vez hecha esta operación, tendremos que modificar nuestra prueba para que sea capaz de usar el origen que acabamos de añadir.
A través de la variable de clase TestContext que posee la clase de pruebas podremos acceder a los datos, usando la propiedad DataRow.
La prueba unitaria queda de la siguiente manera:
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV",
"|DataDirectory|\\testdata.csv", "testdata#csv", DataAccessMethod.Sequential),
DeploymentItem("TestProject1\\testdata.csv"), TestMethod()]
public void SumarTest()
{
Service1 target = new Service1();
int a = (int)this.TestContext.DataRow[0];
int b = (int)this.TestContext.DataRow[1];
int expected = (int)this.TestContext.DataRow[2];
int actual;
actual = target.Sumar(a, b);
Assert.AreEqual(expected, actual);
}
Fijaros en los atributos DataSource y DeploymentItem. Estos dos atributos se han añadido al configurar el origen de datos.
El atributo DataSource indica el origen de datos que se empleará en la prueba, así como la forma de acceder al mismo.
El atributo DeployementItem permite especificar ficheros adicionales que se incluirán entre los ficheros que se usarán para la prueba. En este caso se indica que se va a incluir el fichero testdata.csv, que es el fichero que contiene todos los valores posibles que queremos probar como parámetros de entrada.
El resultado que obtenemos es como si la prueba la ejecutásemos tantas veces como número de registros tenga el origen de datos.
