Primero, algunas definiciones:
Una prueba de unidad prueba las unidades de forma aislada de otras unidades, pero lo que eso significa no está definido concretamente por ninguna fuente autorizada, así que definámoslo un poco mejor: si se cruzan los límites de E / S (si esa E / S es red, disco, pantalla o entrada UI), hay un lugar semi-objetivo donde podemos dibujar una línea. Si el código depende de E / S, está cruzando el límite de una unidad y, por lo tanto, tendrá que burlarse de la unidad responsable de esa E / S.
Según esa definición, no veo una razón convincente para burlarse de cosas como funciones puras, lo que significa que las pruebas unitarias se prestan a funciones puras o funciones sin efectos secundarios.
Si desea unir las unidades de prueba con efectos, las unidades responsables de los efectos deben ser burladas, pero quizás debería considerar una prueba de integración. Entonces, la respuesta corta es: "si necesita burlarse, pregúntese si lo que realmente necesita es una prueba de integración". Pero hay una respuesta mejor y más larga aquí, y la madriguera del conejo es mucho más profunda. Los simulacros pueden ser el olor de mi código favorito porque hay mucho que aprender de ellos.
Olores de código
Para esto, pasaremos a Wikipedia:
En la programación de computadoras, un olor a código es cualquier característica en el código fuente de un programa que posiblemente indique un problema más profundo.
Continúa más tarde ...
"Los olores son ciertas estructuras en el código que indican una violación de los principios fundamentales del diseño y tienen un impacto negativo en la calidad del diseño". Suryanarayana, Girish (noviembre de 2014). Refactorización para olores de diseño de software. Morgan Kaufmann. pags. 258.
Los olores de código generalmente no son errores; no son técnicamente incorrectos y no impiden que el programa funcione. En cambio, indican debilidades en el diseño que pueden ralentizar el desarrollo o aumentar el riesgo de errores o fallas en el futuro.
En otras palabras, no todos los olores de código son malos. En cambio, son indicaciones comunes de que algo podría no expresarse en su forma óptima, y el olor puede indicar una oportunidad para mejorar el código en cuestión.
En el caso de burlarse, el olor indica que las unidades que parecen estar pidiendo burlas dependen de las unidades que se burlan. Puede ser una indicación de que no hemos descompuesto el problema en piezas con solución atómica, y eso podría indicar una falla de diseño en el software.
La esencia de todo desarrollo de software es el proceso de dividir un gran problema en partes más pequeñas e independientes (descomposición) y componer las soluciones juntas para formar una aplicación que resuelva el gran problema (composición).
Se requiere burlarse cuando las unidades utilizadas para dividir el gran problema en partes más pequeñas dependen unas de otras. Dicho de otra manera, se requiere burlarse cuando nuestras supuestas unidades de composición atómica no son realmente atómicas, y nuestra estrategia de descomposición no ha logrado descomponer el problema más grande en problemas más pequeños e independientes para ser resueltos.
Lo que hace que burlarse de un código huela no es que haya algo intrínsecamente malo con la burla, a veces es muy útil. Lo que lo convierte en un olor a código es que podría indicar una fuente problemática de acoplamiento en su aplicación. A veces, eliminar esa fuente de acoplamiento es mucho más productivo que escribir un simulacro.
Hay muchos tipos de acoplamiento, y algunos son mejores que otros. Comprender que los simulacros son un olor a código puede enseñarle a identificar y evitar los peores tipos al principio del ciclo de vida del diseño de la aplicación, antes de que el olor se convierta en algo peor.