En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado.Un "módulo de código" o "unidad" es, usualmente, un método/procedimiento/función. Las características más resaltantes es que son (o deberían ser) automatizadas, completas, repetibles e independientes.
En este post me enfoco en la característica de "independencia". Es decir, que una prueba pueda ejecutarse sin afectar otras pruebas y sin depender de otros módulos de la aplicación, como son bases de datos, servidores HTTP (web) o SMTP (correo electrónico), etc.
Muchas veces, ya sea por ignorancia, inexperiencia, o mera flojera, he visto pruebas unitarias que invocan directamente a los servicios que mencioné anteriormente. Por ejemplo, una prueba para el módulo que envía correos electrónicos que depende de un servidor de correo en particular (¿mail.cantv.net?), o que espera que cierta data ya esté presente en la base de datos, o que algún archivo esté disponible en el sistema. Esto está bien para las Pruebas de Integración, pero no para una simple prueba unitaria.
Buscando en la Web métodos para librarnos de esas dependencias (al menos cuando se programa en Java), encontré las siguientes herramientas:
- JMock - Una librería que permite crear objetos simulados (mock objects).
- Dumbster - Un simulador de servidor de correo electrónico, muy fácil de usar.
- NanoHTTP - Un servidor web tan pequeño que consiste de una única clase.
- HSQLDB - Un servidor de base de datos que puede ejecutarse en memoria. Claro que en mi opinión es mejor usar un mock object creado con JMock.
Bueno, si encuentro alguna otra la pondré por aquí.

