Tiene una clase X y escribe algunas pruebas unitarias que verifican el comportamiento X1. También hay una clase A que toma X como una dependencia.
Cuando escribe pruebas unitarias para A, se burla de X. En otras palabras, mientras prueba unitariamente A, establece (postula) que el comportamiento del simulacro de X sea X1. El tiempo pasa, la gente usa su sistema, necesita cambios, X evoluciona: usted modifica X para mostrar el comportamiento X2. Obviamente, las pruebas unitarias para X fallarán y deberá adaptarlas.
¿Pero qué pasa con A? Las pruebas unitarias para A no fallarán cuando se modifique el comportamiento de X (debido a la burla de X). ¿Cómo detectar que el resultado de A será diferente cuando se ejecute con la X "real" (modificada)?
Espero respuestas en la línea de: "Ese no es el propósito de las pruebas unitarias", pero ¿qué valor tienen entonces las pruebas unitarias? ¿Realmente solo te dice que cuando pasan todas las pruebas, no has introducido un cambio radical? Y cuando el comportamiento de alguna clase cambia (voluntaria o involuntariamente), ¿cómo puede detectar (preferiblemente de manera automatizada) todas las consecuencias? ¿No deberíamos centrarnos más en las pruebas de integración?
X1
que está diciendo que X
implementa la interfaz X1
. Si cambia la interfaz X1
al X2
simulacro que usó en las otras pruebas, ya no debería compilar, por lo tanto, se ve obligado a corregir esas pruebas también. Los cambios en el comportamiento de la clase no deberían importar. De hecho, su clase A
no debería depender de los detalles de implementación (que es lo que estaría cambiando en ese caso). Por lo tanto, las pruebas unitarias A
todavía son correctas y le dicen que A
funciona dada una implementación ideal de la interfaz.