Creo que la posibilidad de elegir entre escribir objetos ficticios a mano o mediante el uso de un marco depende mucho de los tipos de componentes que se está probando.
Si es parte del contrato para que el componente bajo prueba se comunique con sus colaboradores siguiendo un protocolo preciso, entonces los objetos simulados instrumentados ("Mocks") son lo que se debe usar. Con frecuencia, es mucho más fácil probar dichos protocolos utilizando un marco de burla que mediante codificación manual. Considere un componente que se requiere para abrir un repositorio, realizar algunas lecturas y escrituras en un orden prescrito, y luego cerrar el repositorio, incluso frente a una excepción. Un marco de burla facilitaría la configuración de todas las pruebas necesarias. Las aplicaciones relacionadas con las telecomunicaciones y el control de procesos (para elegir un par de ejemplos aleatorios) están llenas de componentes que deben probarse de esta manera.
Por otro lado, muchos componentes en aplicaciones comerciales generales no tienen restricciones particulares sobre cómo se comunican con sus colaboradores. Considere un componente que realiza algún tipo de análisis de, digamos, cargas de cursos universitarios. El componente necesita recuperar información del instructor, estudiante y curso de un repositorio. Pero no importa el orden en que recupera los datos: instructor-alumno-curso, alumno-curso-instructor, todo a la vez, o lo que sea. No es necesario probar y aplicar un patrón de acceso a datos. De hecho, sería perjudicial probar ese patrón, ya que exigiría una implementación particular innecesariamente. En este contexto, los objetos ficticios simples no instrumentados ("Stubs") son adecuados y un marco de burla es probablemente excesivo.
Debo señalar que incluso cuando se corta, un marco puede hacer que su vida sea mucho más fácil. Uno no siempre tiene el lujo de dictar las firmas de sus colaboradores. Imagine pruebas unitarias de un componente que se requiere para procesar datos recuperados de una interfaz gruesa como IDataReader o ResultSet. El troquelado a mano de tales interfaces es, en el mejor de los casos, desagradable, especialmente si el componente bajo prueba solo utiliza tres de los innumerables métodos en la interfaz.
Para mí, los proyectos que han requerido marcos de burla casi siempre tienen una naturaleza de programación de sistemas (por ejemplo, proyectos de infraestructura web o de base de datos, o plomería de bajo nivel en una aplicación comercial). Para proyectos de programación de aplicaciones, mi experiencia ha sido que había pocos simulacros a la vista.
Teniendo en cuenta que siempre nos esforzamos por ocultar los detalles de la infraestructura de bajo nivel desordenado tanto como sea posible, parece que deberíamos aspirar a que los stubs simples superen con creces a los simulacros.
La codificación rígida es mucho más fácil si no tiene experiencia con el marco. Un Framework es más potente, especialmente si desea hacer afirmaciones sobre si se llama un método en absoluto o con frecuencia. – k3b