Pruebas unitarias: Capa de acceso a datos

En este post abordaremos cómo es posible hacer pruebas unitaria sobre la capa de acceso a datos, tanto del código .NET ( C#, VB.NET o el que sea ) que usamos para acceder a los datos,como de los procedimientos almacenados que puede tener nuestra base de datos.

El código empleado para acceder a la base de datos podría ser algo similar a este:

public List<CustomerEntity> GetList(string name)
{
    List<CustomerEntity> list = new List<CustomerEntity>();
    CustomerEntity customer;
    try
    {
        string connectionString = 
            ConfigurationManager.ConnectionStrings["Database"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            string commandText = "dbo.GetCustomerList";
            using (SqlCommand command = new SqlCommand(commandText))
            {
                command.CommandText = commandText;
                command.CommandType = CommandType.StoredProcedure;
                command.Connection = conn;
                command.Parameters.AddWithValue("@Name", name);
                using (SqlDataReader dr = command.ExecuteReader())
                {
                    if (dr != null)
                    {
                        while (dr.Read())
                        {
                            customer = new CustomerEntity();
                            customer.Name = dr["Name"].ToString();
                            customer.Address = dr["Address"].ToString();
                            list.Add(customer);
                        }
                    }
                }
            }
        }
    }
    catch (SqlException ex)
    {
        // Logear error.
    }

    return list;
}

Para poder probar este método no necesitamos conocer nada que no hayamos visto hasta ahora. Simplemente tendremos que tener juegos de datos para hacer que las pruebas sean algo más reales y poder probar el código. Por ejemplo, en el caso anterior nos interesa que cuando llamemos al procedimiento almacenado éste devuelva datos.

Para poder realizar pruebas unitarias de los procedimientos almacenados la cosa cambia, ya que es necesario disponer y conocer Visual Studio Database Edition.

Esta versión de Visual Studio nos permite versionar el schema de base de datos como cualquier otro proyecto, permitiendo que todos los desarrolladores del equipo puedan disponer de la última versión de la base de datos en cualquier momento.

Tiene bastante características que simplificar el trabajo con base de datos en equipos de desarrollo pero en este post hablaremos sobre la característica de realizar pruebas unitarias sobre procedimientos almacenados.

Con Visual Studio Database Edition vamos a estar seguros de que todos los desarrolladores tendrán siempre la última versión de schema y podrán desplegarla en su entorno antes de ejecutar las pruebas, por lo que con más motivo, cuando probamos nuestros métodos de acceso a datos podremos optar por que nuestras pruebas unitarias puedan usar la base de datos.

Yo al menos es lo que hago. Para poder probar la capa de acceso a datos, los métodos C#, uso la base de datos, sus procedimientos y los datos que creo con los planes de generación de datos, simplificando bastante la implementación de las pruebas.

En las aplicaciones que desarrollo, al menos siempre implemento una prueba unitaria por cada método de acceso a datos y por cada procedimiento almacenado y cómo mínimo, en las pruebas busco cobertura, es decir, que todos nuestros procedimientos estén probados y que se pruebe el “100%” del contenido de los mismos.

Si tenemos este tipo de pruebas implementadas sobre todos los procedimientos almacenados y sobre todos los métodos de acceso a datos nos estaremos protegiendo contra sentencias mal construidas, sentencias sql que no devuelven todos los campos que se esperan, errores en el número de parámetros que se pasan a los procedimientos, cambios en la base de datos que hacen que dejen de funcionar algunas sentencias SQL etc….justamente los errores típicos que suelen ocurrir cuando hablamos de acceso a datos.

Como veremos a continuación las pruebas unitarias de procedimientos almacenados son muy similares al resto de pruebas.

Para crear las pruebas unitarias, desde la vista de schema que nos ofrece Visual Studio Database Edition, tendremos que seleccionar los procedimientos almacenados sobre los que queremos implementar las pruebas.

image

Del mismo modo que ocurre con el resto de pruebas, nos permitirá crear las pruebas en un proyecto nuevo o en un proyecto existente. Si elegimos un proyecto ya existente podremos meterlo dentro de una clase de pruebas que exista o crear una nueva clase de pruebas dentro del proyecto seleccionado.

Una vez creadas las pruebas, podremos ver el código de la mismas y modificarlas según nuestras necesidades. Si seleccionamos la clase de pruebas veremos una ventana como la que se muestra a continuación.

image

image

En el primer desplegable de la izquierda aparece el listado de todos las pruebas que están dentro de la clase.

En el segundo desplegable podremos ver el código de la prueba o añadir código que nos interese ejecutar antes  ( pre-test ) o después de la prueba ( post-test ). Algo similar la funcionalidad de los métodos de inicialización que vimos en los post anteriores.

En la parte inferior, aparece otro desplegable que nos permite configurar la condición que hace que el resultado de la prueba sea correcta.

Podemos añadir tantas condiciones como queramos, incluso no añadir ninguna condición. En este último caso la prueba siempre daría como resultado que todo ha ido bien, salvo que se genere una excepción.

Visual Studio Database Edition también nos permite establecer algunos parámetros de configuración antes de lanzar las pruebas unitarias.

Por ejemplo, permite indicar si hay que hacer un despliegue automático antes de ejecutar las pruebas. Estos provocará que la base de datos se cree de nuevo y la establezca en su estado inicial.

También podremos indicar, si queremos utilizar un plan de generación de datos para cargar la misma con información de ejemplo sobre la cuál ejecutar las pruebas.

image

Para aquellos que no lo conozcáis se pueden crear planes de generación de datos para cargar las tablas de la base de datos con datos de ejemplo y así hacer que nuestras pruebas sean algo más reales.

Los planes se crean sobre el proyecto de base de datos. Add>Data Generation Plan.

image

image

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *