Contenido
Clasificación de los Test Unitarios
En el desarrollo de software, los tests unitarios se pueden clasificar en varias categorías según diferentes criterios, como su objetivo, alcance o la técnica utilizada. Aquí tienes una clasificación comúnmente aceptada en la industria del software:
1. Según su Objetivo:
a. Tests Positivos (Positive Tests)
- Descripción: Verifican que el código funcione correctamente cuando se le proporcionan datos válidos o casos esperados.
- Ejemplo: Probar que una función de suma devuelve 5 cuando se le pasa 2 y 3 como parámetros.
b. Tests Negativos (Negative Tests)
- Descripción: Aseguran que el código maneje correctamente datos no válidos o escenarios no esperados.
- Ejemplo: Probar que una función de suma lanza un error cuando se le pasa un valor nulo o una cadena de texto.
2. Según su Alcance:
a. Tests de Comportamiento (Behavioral Tests)
- Descripción: Se centran en el comportamiento esperado de la funcionalidad, sin considerar cómo se implementa.
-
Ejemplo: Verificar que un método
login()
retorna verdadero con credenciales válidas y falso con credenciales incorrectas.
b. Tests de Estado (State Tests)
- Descripción: Evalúan el estado interno del objeto o componente después de ejecutar una acción.
-
Ejemplo: Comprobar que después de llamar a un método
addItem()
, el tamaño de una lista aumenta en uno.
3. Según el Tipo de Datos:
a. Tests con Datos Normales (Normal Data Tests)
- Descripción: Utilizan datos típicos y esperados.
- Ejemplo: Probar una función de suma con números enteros positivos.
b. Tests con Datos Limítrofes (Boundary Tests)
- Descripción: Utilizan valores en los límites de las condiciones esperadas.
- Ejemplo: Probar con el valor máximo o mínimo permitido por una variable.
c. Tests con Datos Inválidos (Invalid Data Tests)
- Descripción: Utilizan datos inesperados o incorrectos.
-
Ejemplo: Probar con
None
, cadenas de texto en lugar de números, etc.
4. Según el Nivel de Aislamiento:
a. Tests Puros (Pure Unit Tests)
- Descripción: Prueban un método o función sin ninguna dependencia externa.
- Técnicas: Mocking y stubbing para simular dependencias.
b. Tests Integrados (Integrated Unit Tests)
- Descripción: Prueban una unidad de código junto con algunas dependencias reales, aunque en un entorno controlado.
- Ejemplo: Probar un método que utiliza otro servicio de la misma clase o módulo.
5. Según la Técnica Utilizada:
a. Tests de Caja Negra (Black Box Tests)
- Descripción: Prueban la funcionalidad sin conocer la implementación interna.
- Enfoque: Solo se consideran las entradas y salidas.
b. Tests de Caja Blanca (White Box Tests)
- Descripción: Se basan en el conocimiento del código fuente.
- Enfoque: Cubren rutas de ejecución, condiciones lógicas y bucles.
6. Según la Estructura:
a. Tests de Método Único (Single Method Tests)
- Descripción: Prueban un solo método o función.
-
Ejemplo: Probar la suma de dos números en un método
sum()
.
b. Tests de Flujo (Flow Tests)
- Descripción: Verifican el flujo de datos o el comportamiento a través de varios métodos relacionados.
-
Ejemplo: Probar un flujo de autenticación que involucra
login()
ygetUserProfile()
.
7. Según su Naturaleza:
a. Tests Deterministas (Deterministic Tests)
- Descripción: Siempre producen el mismo resultado para un conjunto de entradas dado.
-
Ejemplo: Una función matemática pura como
sum()
.
b. Tests No Deterministas (Non-deterministic Tests)
- Descripción: Pueden producir resultados diferentes con las mismas entradas debido a factores externos como la hora o el estado del sistema.
- Ejemplo: Probar una función que genera números aleatorios.
¿Cuándo usar cada tipo de test unitario?
- Positivos y Negativos: Siempre que quieras comprobar el funcionamiento esperado y el manejo de errores.
- Behavioral y State: Para validar comportamientos de usuario o integridad de datos.
- Boundary y Invalid Data: Al probar validaciones y límites de datos.
- Pure y Integrated: Al probar lógica pura o al integrar dependencias controladas.
- Black Box y White Box: Dependiendo de si conoces la implementación interna.
- Deterministic y Non-deterministic: Para funciones puras o métodos con dependencia de factores externos.