Hace algún tiempo leí, en una respuesta de desbordamiento de pila que no puedo encontrar, una oración que explicaba que debería probar las API públicas, y el autor dijo que debería probar las interfaces. El autor también explicó que si la implementación de un método cambiara, no debería necesitar modificar el caso de prueba, ya que esto rompería el contrato que asegura que el sistema bajo prueba funcione. En otras palabras, una prueba debería fallar si el método no funciona, pero no porque la implementación haya cambiado.
Esto llamó mi atención cuando hablamos de burlarse. Dado que la burla depende en gran medida de las expectativas de llamadas del sistema bajo las dependencias de prueba, las simulaciones están estrechamente relacionadas con la implementación en lugar de la interfaz.
Mientras investigan simulacros versus trozos, varios artículos coinciden en que se deben usar trozos en lugar de simulacros, ya que no se basan en las expectativas de las dependencias, lo que significa que la prueba no necesita conocer el sistema subyacente bajo la implementación de la prueba.
Mis preguntas serían:
- ¿Los simulacros violan el principio abierto / cerrado?
- ¿Hay algo que falta en el argumento a favor de los talones en el último párrafo, que hacen que los talones no sean tan buenos frente a los simulacros?
- Si es así, ¿cuándo sería un buen caso de uso para burlarse y cuándo sería un buen caso de uso para usar talones?
Since mocking relays heavily on expectation calls from system under test's dependencies...
Creo que aquí es donde vas mal. Un simulacro es una representación artificial de un sistema externo. No representa el sistema externo de ninguna manera, excepto en la medida en que simula el sistema externo de tal manera que permite ejecutar pruebas contra el código que depende de dicho sistema externo. Aún necesitará pruebas de integración para demostrar que su código funciona con el sistema real sin desmontar.