Tipos de algoritmos y sus pruebas unitarias

Tipos de algoritmos y sus pruebas unitarias

Al disponernos a programar una funcionalidad, primero debemos establecer cuál es la estructura final que esperamos lograr. Clasificaremos los algoritmos según dicha estructura en:

  1. Un solo dato (un número, string, fecha o booleano)
  2. Una lista de datos
  3. Una estructura de datos (una clase con propiedades)
  4. Si una propiedad es una estructura de datos
  5. Una lista de estructuras de datos

A continuación, veremos cómo lograr que las pruebas unitarias tengan siempre una sola comparación, aunque el resultado del algoritmo sea compuesto:

1. Un solo dato

Por un solo dato, me refiero a un solo string, número, fecha o booleano. En estos casos realizamos la comparación con el método Assert.AreEqual el cual tiene la funcionalidad para saber comparar estos tipos de datos:

assert

2. Una lista de datos

Cuando un algoritmo retorna una lista de datos, primero reconozcamos que el algoritmo del tipo “un solo dato” debe tener ya sus pruebas unitarias.

De esta manera, podemos centrarnos en solamente probar el código que realiza la lista. Realizamos la comparación con el método CollectionAssert.AreEqual.

collection-assert

Este es un ejemplo en el repositorio: https://github.com/oscarcenteno/algoritmos.cs.conversiondecuentas.

3. Una estructura de datos

Cuando un algoritmo retorna una estructura de datos, probamos cada propiedad con su propia clase de pruebas unitarias.

cada-propiedad-se-prueba-sola

4. Si una propiedad es una estructura de datos

Si un algoritmo ya retornó una estructura de datos, pero otro objeto o propiedad es responsable de retornarlo, podemos comparar todas las propiedades de la siguiente manera:

verificacion-son-iguales

Este es otro ejemplo, donde una propiedad de una clase retorna una estructura de datos:

propiedad-retorna-estructura-de-datos

Para utilizar Verificación.SonIguales utilice el paquete NuGet llamado Mapeable.ComparacionesParaPruebasUnitarias.

El método SonIguales compara todas las propiedades recursivamente por su valor. Dará una prueba fallida si cualquiera de ellas no es igual.

5. Una lista de estructuras de datos

Cuando una propiedad u objeto retorna una lista de estructuras de datos, tenemos que probar específicamente que la creación de dicha lista está correcta. Si programamos con objetos de responsabilidad única, podemos realizar solamente 3 pruebas que representan:

  1. La lista vacía
  2. La lista con un elemento
  3. La lista con tres elementos

Para hacer las tres pruebas unitarias con solamente una comparación cada una, podemos utilizar el método “Verificacion.LasListasSonIguales”, de la siguiente manera:

listas-son-iguales

Para utilizar Verificación.LasListasSonIguales utilice el paquete NuGet llamado Mapeable.ComparacionesParaPruebasUnitarias.

Al planificar un nuevo algoritmo o al modificar uno existente siempre deberíamos visualizar los tipos de algoritmos que componen la funcionalidad. Así tendremos mayor claridad para programar sin errores. Además, como hemos visto, cada tipo de algoritmo tiene una manera particular de verificarse en las pruebas unitarias.

2 comentarios sobre “Tipos de algoritmos y sus pruebas unitarias

  1. Buenas tardes,
    En el punto anterior “Video: Pruebas unitarias no confiables (ejemplos y riesgos)”, se menciona que una prueba unitaria no es confiable cuando maneja lógica como cálculos, clausulas If, entre otros. Sin embargo, noto que en el ejemplo de “Una lista de datos”, se utiliza “Conversiones”.
    No es cierto que con eso, esa prueba unitaria entraría en las malas prácticas que el video advierte no replicar? Si estoy equivocada por favor me corrige.
    Muchas Gracias

    Me gusta

    1. Aprecio tu pregunta, Marianela. En este ejemplo, Conversiones es la clase que tiene el método que estamos probando. Cuando hablamos de no tener lógica en la prueba unitaria nos referimos al código que inicializa el resultado esperado que no debe tener cálculos, if u otro código que pudiera llegar a tener algún defecto. Estoy para servirle con cualquier otra duda.

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s