Esta es una distinción importante, pero desafortunadamente nunca encontrará un acuerdo. El problema es que la mayoría de los desarrolladores los definen desde su propio punto de vista. Es muy similar al debate sobre Plutón. (Si estuviera más cerca del Sol, ¿sería un planeta?)
Las pruebas unitarias son fáciles de definir. Prueba el CUT ( Código bajo prueba ) y nada más. (Bueno, tan poco como sea posible). Eso significa simulacros, falsificaciones y accesorios.
En el otro extremo del espectro hay lo que muchas personas llaman pruebas de integración de sistemas . Eso está probando tanto como sea posible, pero sigue buscando errores en su propio CUT.
Pero ¿qué pasa con la vasta extensión entre?
- Por ejemplo, ¿qué pasa si prueba solo un poco más que el CUT? ¿Qué pasa si incluye una función de Fibonacci, en lugar de usar un dispositivo que se había inyectado? Llamaría a eso prueba funcional , pero el mundo no está de acuerdo conmigo.
- ¿Qué pasa si incluye
time()
o rand()
? ¿O qué pasa si llamas http://google.com
? Llamaría a ese sistema de prueba , pero nuevamente, estoy solo.
¿Por qué importa esto? Porque las pruebas del sistema no son confiables. Son necesarios, pero a veces fallarán por razones más allá de su control. Por otro lado, las pruebas funcionales siempre deben pasar, no fallar al azar; si son rápidos, también podrían usarse desde el principio para usar el desarrollo guiado por pruebas sin escribir demasiadas pruebas para su implementación interna. En otras palabras, creo que las pruebas unitarias pueden ser más problemáticas de lo que valen, y tengo buena compañía .
Puse pruebas en 3 ejes, con todos sus ceros en las pruebas unitarias :
- Pruebas funcionales: usando código real cada vez más profundo en tu pila de llamadas.
- Pruebas de integración: cada vez más alto en su pila de llamadas; en otras palabras, probar su CUT ejecutando el código que lo usaría.
- Pruebas del sistema: más y más operaciones irrepetibles (planificador O / S, reloj, red, etc. )
Una prueba puede ser fácilmente los 3, en diversos grados.