Su estrategia y esqueleto dependen, no trivialmente, de qué tipo de pruebas está buscando generar, qué tipo de cobertura está buscando y el idioma / entorno en el que está trabajando.
Es bastante sencillo escribir un generador de prueba que, para lenguajes como C o Java, lea firmas de clase y genere automáticamente pruebas para casos de esquina estándar (pasando 0, 2 valores aleatorios, MAX_INT, MIN_INT, a un argumento entero, nulos para valores nulos , etc ...). Luego puede ejecutar las pruebas generadas, registrar los resultados de cada prueba y filtrarlas manualmente para eliminar las irrelevantes, aprobar resultados aceptables para las pruebas que pasan (para que puedan pasar automáticamente a partir de ese momento) y marcar como inválidas las que fallan .
Puede aumentar esto con el etiquetado / comentario / refactorización de clases para ayudar a su generador con sugerencias adicionales. Es posible que tenga una etiqueta que enumere todas las posibles excepciones que una llamada al método puede generar, o que proporciona un rango reducido de enteros válidos para un argumento entero. Míralos como una abreviatura para tener que escribir las pruebas tú mismo.
Entonces, aquí hay algunos componentes que querrás ver:
- Un componente para analizar automáticamente el código fuente / firmas de funciones / anotaciones manuales, produciendo casos de prueba estándar, o contornos / firmas para casos de prueba que esperan a que se complete su entrada.
- Un lenguaje en constante crecimiento / cambio de etiquetas / anotaciones / comentarios que puede ir a cualquier nivel de granularidad (método / clase / firma / bucles while / etc.) que representan sugerencias para el creador de pruebas automatizado. Idealmente, debería poder jugar con este lenguaje sin tener que recodificar su marco o cualquier fragmento en él.
- Corredor de prueba automatizado, con la capacidad de identificar pruebas nuevas / antiguas y registrar / probar contra respuestas "aceptables" para cada prueba. Idealmente, este corredor construirá una base de datos de ejecuciones de prueba, resultados aceptados / rechazados y resultados aceptables actuales para cada prueba.
- "Faker de objetos" automatizado que, dado un nombre de clase y un mapa de nombres-> valores, puede generar un objeto que imita la clase, devolviendo datos personalizables para llamadas a funciones, accesos, espacios de datos públicos, etc.
Existen muchos marcos de prueba que ya incluyen fragmentos de esta funcionalidad para varios idiomas y plataformas. Si bien es bastante fácil comenzar a hacer este trabajo usted mismo y desarrollar este tipo de marco de manera orgánica internamente, también es un proyecto interminable a largo plazo que probablemente duplicará el trabajo existente. Recomiendo tomarse un tiempo considerable para ver qué hay disponible primero, y luego decidir si vale la pena sumergirse.