Estoy en el proceso de elegir nuevas herramientas de prueba de unidades para el proyecto que pronto comenzará. ¡Hay un montón de ellos!
Los requisitos básicos que tengo son que puede ejecutar pruebas en al menos Windows y Linux, es compatible con C ++ / C ++ 03, puede ejecutar pruebas en paralelo (por ejemplo, para aprovechar los procesadores multi-core), y se puede ejecutar desde la línea de comandos. Pero estos son requisitos bastante amplios y no han reducido el campo.
Para intentar hacer eso, estoy investigando posibles problemas y trampas de diferentes tipos de implementaciones. Por ejemplo, si quisiera usar un motor de pruebas unitarias en un lenguaje de nivel superior como Python, ¿todavía produciría resultados formateados como pruebas unitarias C? Mi intención principal aquí es usar las mismas herramientas de almacenamiento e informes para las pruebas de resultados de C ++ y Python.
También me pregunto si es necesario tener un motor específico para ejecutar las pruebas, o si es suficiente tenerlos integrados en nuestro motor de integración continua (buildbot).
¿Son válidas estas dos preocupaciones anteriores? ¿Qué más debería preocuparme al evaluar motores de prueba unitaria?
fuente
Respuestas:
He usado tanto Google Test como Boost Test . Ambos son marcos de xUnit, funcionan en Unix y Windows, y son maduros. Terminé usando Google Test debido a Google Mock ya que también quería un marco burlón. Cualquiera de los dos debería funcionar bien en buildbot.
Personalmente, quiero que el marco de prueba de la unidad sea mínimo y rápido. Quiero muchas pruebas y, por lo tanto, quiero que se ejecuten en un plazo razonable. Personalmente, me gusta usar el marco principal para un lenguaje en lugar de una mega herramienta, pero eso es personal. Si lo desea, puede ver las pruebas de iteración continua: cada vez que guarda un archivo, ejecuta automáticamente los casos de prueba de los que depende el archivo.
Siempre puede escribir una clase de interfaz en su prueba unitaria, lo que permite un cambio rápido y efectivo de los marcos.
fuente
Mis experiencias involucran CruiseControl.NET y Team Foundation Build. Soy un desarrollador de .NET. Estos provienen de mis experiencias, y solo incluyen las experiencias donde tuvimos pruebas como parte del proceso de construcción, por lo que si no coinciden con su entorno, lo siento.
Si está realizando una compilación en cada registro, es posible que se activen las compilaciones antes de que la compilación anterior termine de ejecutarse. ¿Cómo quieres manejar situaciones como esta? Por ejemplo, si tarda 30 minutos en ejecutar todo el conjunto de pruebas y el código se verifica cada 15 minutos, ¿desea omitir algunas compilaciones? ¿Saltar algunas pruebas? ¿Apilarlos, construirlos en orden y volver a decirle a Bob que rompió la construcción con su registro hace 5 horas?
Team Foundation Build puede usar múltiples núcleos para compilaciones y pruebas con 2010 (las versiones anteriores solo podían usar múltiples núcleos para compilaciones C ++). CruiseControl.NET puede ejecutar subprocesos separados, pero al leer la documentación , parece que cada proyecto puede estar en su propio subproceso, pero que no puede tener múltiples subprocesos por proyecto (puedo estar equivocado). Nunca hemos tenido una máquina multinúcleo para compilaciones en los entornos en los que he trabajado, por lo que no puedo hablar de cuán buenas / justas / malas son (o lo equivocado que soy).
En un empleador anterior, incluimos scripts de Python en la compilación, pero no teníamos ninguna prueba configurada para probar Python. NANT se utilizó para los componentes .NET.
Nunca tuve tiempo para hacerlo, pero en un empleador anterior (vendimos software "retráctil"), teníamos muchos errores que eran específicos del sistema operativo (y a veces específicos del paquete de servicio), por lo que uno de mis objetivos era configurar varias pruebas Máquinas con diferentes sistemas operativos (32 + 64 bits y todos los sabores de Windows de escritorio y servidor desde XP en adelante). Las máquinas de compilación eran máquinas WinXP simples o antiguas (o virtuales) porque ese era todo el "hardware" que nos permitían los gerentes. En cambio, todas las pruebas se ejecutaron en la máquina de compilación. También configuramos suites de validación como colecciones de pruebas unitarias, aunque no se ejecutaron para actualizaciones menores.
fuente