¿Qué marcos de simulación permiten cero cambios en el código heredado?

Estoy buscando un marco de burla para un gran proyecto de C++. Elegí tentativamente GoogleTest como el marco de prueba, así que primero miré GoogleMocks. Sin embargo, luego descubrí Isolator++ de TypeMock, que tiene dos características que me gustaron mucho:

  1. Puede burlarse de cualquier cosa.
  2. Le permite agregar cobertura de prueba sin cambiar el código heredado (usando la interceptación de llamadas de método y tal vez alguna otra magia). No es necesario empalmar interfaces para agregar pruebas.

El inconveniente es que Isolator++ es un producto comercial. Me preocupa el bloqueo de proveedores y demás. ¿Hay otros marcos que tengan las mismas capacidades? ¿Quizás algo de código abierto?


Permítanme también descartar una crítica común que he observado en otras publicaciones: "TypeMock fomenta el mal diseño. Debería mejorar su diseño en lugar de usar una herramienta que apoya los malos hábitos". (mi paráfrasis)

Mi respuesta es esta: quiero mejorar el diseño. También quiero agregar cobertura de prueba ANTES de refactorizar. Con ese fin, la capacidad de agregar pruebas con cero cambios de código es muy atractiva.

No estoy seguro de por qué el "bloqueo del proveedor" es un error mayor que el código heredado no comprobable. Si bien TypeMock puede permitirle ser "perezoso" al reescribir el código, realmente no puede refactorizar el código hasta que tenga pruebas para ver que la refactorización no duele.
Ciertamente no es el gran "espantajo" :), pero solo quería ver si había alternativas antes de tirar el dinero.

Respuestas (1)

Bueno, supongo que esta publicación también podría titularse: "¿Tiene TypeMock Isolator++ algún competidor"? Por lo que puedo decir, la respuesta es no.

Para el código C#, TypeMock Isolator tiene un par de competidores: Telerik JustMock y Microsoft Fakes. Sin embargo, para C++, TypeMock Isolator++ es el único que he encontrado.

Para cualquier persona en esta situación, también sugiero una lectura del libro de Michael Feather "Trabajar de manera efectiva con el código heredado". Ofrece muchos consejos prácticos para realizar las pruebas sin necesidad de simular objetos vivos, como le permite hacer Isolator. Dicho esto, hay casos en los que, en mi opinión, los cambios necesarios son simplemente demasiado invasivos. Introducen demasiado riesgo al realizar las pruebas. Entonces, tal vez Isolator ++ podría valer la pena. Ya veremos...

Actualización: pasé unos tres días tratando de ejecutar una sola prueba con Isolator++ antes de rendirme, así que decidimos prescindir de ella.