Herramienta para generar automáticamente simulacros/stubs/dummies para pruebas unitarias

Mi empleador actual no hace pruebas unitarias (estremecimiento). De hecho, no hay pruebas basadas en host en absoluto; todo se prueba (caja negra) en el objetivo. Y nada de eso puede ser automatizado (¡el horror! ¡el horror!).

Después de algunas molestias, me dieron permiso a regañadientes para investigar las pruebas de host, inicialmente a nivel de subsistema. No es lo ideal, pero es un comienzo, y se puede automatizar para las pruebas de regresión y, si funciona, incluso podría probar las pruebas unitarias.

El sistema de compilación para el objetivo no tiene nada tan simple como un archivo de creación, oh no, de hecho. Tiene una secuencia de comandos Bash, que ejecuta una secuencia de comandos Perl, que invoca algunas secuencias de comandos de Python, que utilizan archivos XML para generar comandos de compilación sobre la marcha.

Me gustaría mantenerme alejado de eso (tal vez en el próximo país, tal vez incluso en el próximo trabajo).

El subsistema tiene más de 200 archivos .CPP. Ni la fuente ni el encabezado incluyen los archivos .H que necesitan, y prefieren confiar en que otros lo hagan (¡cuanto más horror! ¡más horror!). En su mayoría, esto se hace mediante el acertadamente llamado enums.h (o, ¿quiero decir ineptamente?).


Pregunta : Estoy buscando una herramienta que escanee esos más de 200 archivos fuente y encabezados asociados, y averigüe a qué clases, funciones, estructuras, enumeraciones, etc. se hace referencia, pero no se declaran y genera simulacros/stubs/dummies/WhateverYouCareToCallThem, que ¿Puedo ampliar para probar?

Piensa: ¿tal vez podría simplemente escanear los mensajes de error del compilador/enlazador para determinar qué crear?

Windows o Linux. Preferiblemente gratis, pero como eso es muy poco probable, si hay algo comercial donde pueda probar una demostración, podría conseguir que obtengan una licencia.

Importante: debe poder usar el código de producción actual, sin cambios. Herramientas como Google Mocks requieren que declare cosas como virtuales únicamente para poder probar.


[Actualización] Estoy buscando una solución gratuita con licencia para uso comercial.

Todos y cada uno de los marcos de burla se basan en que los métodos son virtuales. El único marco que omite algunas limitaciones que conozco es el de Java, PowerMockitoque modifica el código de bytes para permitir algunas tareas normalmente no permitidas. C ++ no tiene JVM ni reflejo que pueda usar para salirse con la suya con su idea. Los objetos falsos y los objetos simulados son reemplazos directos de los objetos reales: si su código está tan estrechamente acoplado que no puede intercambiar implementaciones, ningún marco lo ayudará de todos modos. En su libro de casos, Trabajar eficazmente con código heredado de M. Feathers podría ser lo que realmente necesita.
¿Qué quiere decir con "referenciado pero no declarado"? ¿Cómo se puede usar una entidad de código si no tiene una declaración/definición en alguna parte?
Sí, otro trabajo, y me encuentro con el mismo problema. ¿Hay un mercado para esto, si lo desarrollo yo mismo?

Respuestas (1)

No es gratis ni es barato , pero es posible que pueda obtener una licencia de demostración, pero esto suena como un trabajo para LDRA TBRun y/o LDRAunit; lo bueno es que le dirá rápidamente qué stubs se necesitan y generará el marco para ellos. , tanto a nivel de unidad como a nivel de subsistema.

También permitirá pruebas unitarias en el hardware de destino, así como en un host, y proporciona un análisis estático y un análisis de flujo de datos muy completos, los cuales pueden ser buenos argumentos de venta para su jefe.

Lo he usado mucho y para mí es mucho menos trabajo generar pruebas útiles que muchos de los competidores que también he usado.

(NB Solo para aclarar que no trabajo para LDRA pero lo uso en el trabajo)

Esto se ve muy bien, @SteveBarnes. ¿Tienes alguna idea del costo?
Creo que la licencia del primer año es del orden de 10k+ dependiendo de las opciones, y luego menos para la renovación de cada año, pero eso es solo un número aproximado. Si se encuentra en un sector industrial en el que están ansiosos por entrar, es posible que pueda obtener un mejor trato. @Mawg
Perdón por no otorgar la respuesta, Steve, pero la compañía no aceptará y me gustaría una respuesta gratuita a esta pregunta. Espero que no te importe demasiado.
@Mawg: ¡si tuviera una respuesta gratuita , la usaría! ¡Lo siento, no puedo señalarte uno, en más de un sentido !