Son aquellos tests que programamos mirando el código fuente. Con este tipo de tests nos ayudamos del propio código fuente para asegurarnos que estamos cubriendo todos los caminos posibles que puede seguir el código: ramificaciones por sentencias if-else, límites/fronteras en los bucles, cóndiciones lógicas...
Son aquellos tests que programamos sin mirar el código fuente del elemento que vamos a testear. Esto puede ser o bien porque no tenemos acceso a dicho código o bien porque no queremos mirarlo.
Para programar este tipo de tests nos tienen que decir cuál es el comportamiento esperado del elemento que hay que testear.
Son funciones cuyo objetivo es conseguir/calcular/procesar información y devolvérnosla en el return.
Ejemplo:
User u = UserService.getUser();
Son funciones cuyo objetivo es ejecutar alguna instrucción que altere el entorno (escribir/modificar en base de datos, enviar un correo, escribir en un fichero, cambiar el estado de un objeto en memoria...
Ejemplo:
login(username, password);
Se deberían evitar sin embargo ejemplos como este:
Ejemplo:
User u = UserService.login(username, password);
Testear el estado implica comprobar que una función nos devuelve el resultado esperado según unas condiciones de partida o argumentos de entrada.
Este tipo de testeo se puede realizar tanto con la técnica de caja negra como con la técnica de caja blanca.
En este tipo de tests se pretende verificar que el elemento bajo test invoca (o no invoca) algún método concreto con unos argumentos concretos.