¿Pruebas unitarias de C++ de última generación? [cerrado]


¿Cuáles son los enfoques más modernos para pruebas unitarias para el lenguaje C++? La clase de lenguajes con mayor poder de introspección (como Python) tiene frameworks de pruebas unitarias que son de alguna manera más naturales de usar. Las pruebas unitarias se pueden definir más fácilmente. En comparación, el clásico CppUnit (basado en JUnit) parece tener un enfoque muy conservador. ¿Hay algo más nuevo y mejor que use la potencia específica de C++ (o incluso C++11) para hacer la vida más fácil?

Tengo ha estado usando CppUnit framework durante un tiempo de manera bastante simplista para partes del proyecto en Windows native C++ (Visual Studio 2005 y 2010). No elegimos el enfoque de Desarrollo basado en pruebas antes, porque ya había una gran cantidad de código heredado, y nos había resultado bastante difícil agregar pruebas para él. Tuvimos que refactorizar la aplicación, pero agregar todas las buenas pruebas llevaría mucho tiempo incluso en el caso.

Recientemente, hemos cambiado a Visual Studio 2013 (debido a la Implementación del estándar C++11), y vamos a comenzar un nuevo proyecto a largo plazo.

Teniendo la experiencia previa buena (pequeña) con las pruebas unitarias, me gustaría probar el enfoque de Desarrollo Impulsado por Pruebas. Como el proyecto no es pequeño (el tamaño esperado es aproximadamente el mismo que el anterior, es decir, alrededor de 200 k líneas de código), prefiero un marco más fácil (pero no menos capaz).

Existe la posibilidad de que el nuevo proyecto pueda conducir a la implementación multiplataforma (Windows y Linux). Hay un soporte de pruebas unitarias en Visual Studio 2013, pero no tengo experiencia con él y cómo encajaría con la multiplataforma.

Hasta ahora, he encontrado la lista de frameworks de pruebas unitarias para C++. Sin embargo, uno no puede ver cómo difieren en principio. Actualmente tengo tres candidatos (opción conservadora):

  • Boost the el candidato probable; banco de pruebas para los estándares de C++; por lo tanto, es probable que sea ampliamente aceptado; probablemente el mayor usuario grupo. Parece ser más avanzado que CppUnit.
  • CppUnit I lo sé, pero escribir todo el código alrededor no es un placer.
  • Visual Studio 2013 incorporado new nuevo para mí, de alguna manera puede generar los esqueletos probablemente.

De todos modos, parece que todos los tres utilizan un enfoque similar. Posiblemente el VS2013 soporta generar el código, pero no significa que conduzca a nada más simple.

¿Hay algún enfoque radicalmente nuevo?

Author: pepr, 2013-12-16

2 answers

El único marco de prueba que vale la pena considerar: Catch

Para una introducción a la lib, ver también aquí y aquí

Es fácil de usar (una lib de solo encabezado que consiste en un solo encabezado), portátil y tiene, con mucho, la sintaxis más simple y limpia de cualquier marco de pruebas unitarias de C++.

Y a diferencia de otras bibliotecas, no necesita recordar dos docenas de macros diferentes para diferentes tipos de aserciones.

Usted acaba de utilizar REQUIERE:

int one = 1;
REQUIRE( one == 2 );

Que, a través de una sobrecarga de operador inteligente, mostrará tanto la expresión original como los valores del argumento expandido en la salida:

test.cc(7): FAILED:
  REQUIRE( one == 2 )
with expansion:
  1 == 43

Comparado con esto, cualquier otro framework es una tarea para usar IMO.

Solía usar Boost.Prueba antes de encontrar esto, pero eso era mucho más engorroso de configurar y usar. Usamos CppUnit en el trabajo, y eso parece estar diseñado para ser lo más frágil y doloroso posible.

He mirado brevemente el marco de prueba VS2013, pero no lo he probado, y parece tolerable, pero muy parecido a emular "la vieja guardia". Realmente no intenta ser más limpio, más fácil o mejor que CppUnit, Boost.Prueba y todos los otros que vinieron antes de la captura. Así que yo diría que no te molestes con eso. Las pruebas deben ser fáciles de escribir (y de entender), y Catch está años luz por delante de todos los demás marcos que he visto en ese frente.

 49
Author: jalf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-16 10:13:31

He estado usando theVisual Studio 2013 built in test framework durante aproximadamente 6 semanas y realmente me gusta. La integración es excelente y es muy fácil de recoger. Si está trabajando en un proyecto que solo se dirige a Windows, lo recomiendo completamente.

 4
Author: Sean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-16 09:39:06