Tienes una clase X y escribes algunas pruebas unitarias que verifican el comportamiento X1. También hay una clase A que toma X como una dependencia.
Cuando escribes pruebas unitarias para A, te burlas de X. En otras palabras, mientras pruebas la unidad A, configuras (postulas) el comportamiento de la simulación de X como X1. El tiempo pasa, la gente usa su sistema, necesita cambiar, X evoluciona: modifica X para mostrar el comportamiento X2. Obviamente, las pruebas unitarias para X fallarán y tendrá que 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)?
Estoy esperando respuestas a lo largo de la línea de: "Ese no es el propósito de la prueba de unidad", pero ¿qué valor tiene la prueba de unidad entonces? ¿Realmente solo le dice que cuando todas las pruebas pasan, no ha introducido un cambio de ruptura? 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?