2008-09-21 12 views
11

Estoy interesado en escuchar experiencias usando TDD y pruebas unitarias para C++ en general con Visual Studio 2005 (Professional)¿Cómo se integra un enfoque TDD con VisualStudio?

Primero algunos antecedentes. Tenemos un proyecto bastante grande y gran parte del mismo se ha desarrollado en Linux utilizando CppUnit para las pruebas unitarias. El proyecto está dividido en varias bibliotecas, cada una con su propio conjunto de pruebas. Tengo un script simple que compila la biblioteca, compila el conjunto de pruebas y luego ejecuta las pruebas. Entonces, después de hacer cambios en el código, simplemente ejecuto "prueba" desde una línea de comando y se ejecutan las pruebas.

Ahora, la mayoría de los desarrolladores están utilizando Visual Studio 2005 en Windows para el desarrollo de este producto. Por supuesto, todavía pueden ejecutar las pruebas desde una línea de comandos usando nmake pero implica pasos adicionales y yo preferiría tener una solución mucho más integrada.

Entonces mi pregunta tiene dos partes.

En primer lugar, ¿cuál es la mejor manera de diseñar el código para las pruebas en una base de código grande? ¿Es normal crear varios proyectos de prueba en una solución, uno para cada biblioteca?

En segundo lugar, ¿hay alguna herramienta para integrar las pruebas de CppUnit en Visual Studio? Con las dependencias configuradas correctamente, el proyecto de prueba debería ejecutar las pruebas, pero actualmente los resultados aún aparecen en una ventana de comandos.

Respuesta

1

Actualmente, mi equipo está utilizando un sistema en el que tenemos una compilación nocturna automatizada (que también puede ejecutarse desde el panel de desarrollo del proyecto) que incluye una solución de "prueba" VS2k5. La solución de prueba contiene todos los proyectos de prueba de la unidad; un proyecto de prueba de unidad para cada "unidad" de código en el proyecto principal.

Cuando se ejecuta la compilación automática, crea la solución principal, luego la solución de prueba y finalmente ejecuta todos los ejecutables producidos por la solución de prueba (una secuencia de comandos Perl pega esto). Los resultados de la compilación, así como la ejecución de la prueba (EXIT _ SUCCESS, EXIT _ FAILURE) se utilizan para actualizar el panel de construcción del proyecto.

El truco EXIT _ FAILURE también se puede aplicar a un paso de compilación personalizado del proyecto principal: si el paso de compilación personalizada de prueba de unidad devuelve EXIT _ FAILURE, la compilación falla.

+0

También utilizamos CruiseControl por lo que todas las pruebas se ejecutan después de cada compromiso con el sistema de control de origen. Sin embargo, estaba buscando algo para que lo usen los desarrolladores como parte del ciclo de pruebas de edición a medida que se desarrollan. –

2

Uso el framework Boost Test. Tiendo a dividir mi código en archivos .lib y tendré un proyecto de prueba EXE en modo consola separado para cada uno. Cuando se construye el proyecto de prueba, hace uso de la 'Etapa de compilación posterior' para lanzarse, ejecutando así las pruebas. Puede hacer que cada proyecto de prueba dependa de su aplicación principal para que cada vez que se construya, todas las pruebas se ejecuten primero, pero esto puede consumir mucho tiempo. En cambio, tiendo a ejecutar los proyectos de prueba a mano según sea necesario, pero mi sistema automatizado de compilación nocturna ejecutará todos los proyectos de prueba de forma rutinaria (lo script y si fallan algunas pruebas, la construcción falla y recibo una notificación por correo electrónico).

Más detalles here.

3

Uno de los proyectos en mi empresa hace exactamente esto. Usamos un marco de prueba unitario llamado CXXTest (http://cxxtest.sourceforge.net/guide.html). Realmente nos gusta este marco para C++ porque solo requiere que escriba un archivo de encabezado que contenga las pruebas de su unidad. Los archivos .CPP se crean mediante un script (se proporcionan los scripts Python y Perl).

Nos integramos con Visual Studio al proporcionar un paso posterior a la compilación que construye las pruebas unitarias (si necesitan construcción) y luego las ejecuta. El resultado (que muestra lo que pasó y lo que falló) se muestra en la ventana de salida; nunca necesita dejar el IDE.

1

También puede utilizar manejado C++ para escribir pruebas de unidad en Visual Studio, utilizando el marco de pruebas de unidad que se construye en.

+0

Desafortunadamente tenemos el VS2005 profesional, no la edición Team, así que no creo que tenga el marco de prueba. También tenemos> 10,000 pruebas ya escritas con CppUnit. –

2
  • encuentro la siguiente jerarquía de carpetas útil. Cree códigos y pruebas como subcarpetas de ProjectFolder. Crea 2 soluciones code \ Project.sln y prueba \ Tests.sln. Ahora para cada biblioteca de clase o ejecutable creado, p. Customers.dll tiene un dll de prueba correspondiente. Por lo tanto, el código \ Customers \ Customers.csproj tendrá tests \ Customers \ TestCustomers.csproj, que hace referencia al primero.
  • La integración de CPPUnit en Visual Studio estaría en la línea de elegir la aplicación correcta en Project Properties .. Configuración de 'Debug'. Creo que this page has what you need tiene una ejecución de prueba de pulsación de tecla única + informes dentro del IDE.
2

Aquí es lo que hago:

  • Crear un proyecto ejecutable de prueba, en su principal solución, que utiliza la fuente de la unidad única, las pruebas de la unidad y el marco de la prueba.
  • Haga que el corredor de prueba genere un archivo de texto al ejecutar con éxito las pruebas, de modo que visual studio pueda rastrear las dependencias.
  • Agregue un proyecto para iniciar su corredor de prueba y generar el archivo de prueba. Esto significa que ahora tiene dos proyectos por prueba.
  • Haga que el corredor de prueba sea una dependencia de la biblioteca que incorpora la unidad.

Personalmente, no creo que el marco de prueba (Google Test, prueba Boost, CppUnit, etc.) importe tanto. La mayoría son funcionalmente equivalentes.

No estoy del todo contento con la cantidad de proyectos generados, pero considero que esto es un problema de la GUI de Visual Studio, en el sentido de que es bastante útil tener estos proyectos incluidos para depuración.

Intenté utilizar los pasos de compilación posteriores para ejecutar las pruebas, pero esto lamentablemente significa que la compilación no se interrumpió después de que la primera falla haya pasado.

+0

¿Por qué votar abajo? –