test resueltos programas programacion principiantes para google ejercicios ejemplos comandos basicos c++ unit-testing cppunit googletest boost-test

c++ - resueltos - google test install



ComparaciĆ³n de los marcos de prueba de unidad de C++ (10)

Sé que ya hay algunas preguntas con respecto a las recomendaciones para los marcos de prueba de unidad de c ++, pero todas las respuestas no ayudaron, ya que solo recomiendan uno de los marcos pero no proporcionan ninguna información sobre una comparación (característica).

Creo que los marcos más interesantes son CppUnit, Boost y el nuevo marco de prueba de Google. ¿Alguien ha hecho alguna comparación todavía?


Acabo de empujar mi propio marco, CATCH , por ahí. Todavía está en desarrollo, pero creo que ya supera a la mayoría de los otros marcos. Diferentes personas tienen diferentes criterios, pero he tratado de cubrir la mayoría del terreno sin demasiadas concesiones. Echa un vistazo a mi entrada de blog vinculado para un catador. Mis cinco características principales son:

  • Solo encabezado
  • Registro automático de pruebas basadas en funciones y métodos.
  • Descompone las expresiones estándar de C ++ en LHS y RHS (para que no necesite toda una familia de macros de afirmación).
  • Soporte para secciones anidadas dentro de un dispositivo basado en funciones
  • Pruebas de nombres usando lenguaje natural - se generan nombres de funciones / métodos

También tiene enlaces Objective-C. El proyecto está alojado en Github


CPUnit ( http://cpunit.sourceforge.net ) es un marco similar a Google Test, pero que se basa en menos macos (las afirmaciones son funciones), y donde las macros tienen el prefijo para evitar el error de macro habitual. Las pruebas parecen:

#include <cpunit> namespace MyAssetTest { using namespace cpunit; CPUNIT_FUNC(MyAssetTest, test_stuff) { int some_value = 42; assert_equals("Wrong value!", 666, some_value); } // Fixtures go as follows: CPUNIT_SET_UP(MyAssetTest) { // Setting up suite here... // And the same goes for tear-down. } }

Se registran automáticamente, por lo que no necesita más que esto. Entonces es solo compilar y ejecutar. Me parece que usar este framework me gusta mucho usar JUnit, para aquellos que han tenido que pasar un tiempo programando Java. ¡Muy agradable!



Recientemente xUnit++ , específicamente como una alternativa a Google Test y Boost Test Library (ver las comparisons ). Si está familiarizado con xUnit.Net, está listo para xUnit ++.

#include "xUnit++/xUnit++.h" FACT("Foo and Blah should always return the same value") { Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return /"0/"."; Assert.Equal(Foo(), Blah()); } THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected), std::make_tuple(0, "0"), std::make_tuple(1, "1"), std::make_tuple(2, "2")) { Assert.Equal(expected, Foo(input)); }

Principales características:

  • Increíblemente rápido: las pruebas se ejecutan simultáneamente .
  • Portátil
  • Registro de prueba automático
  • Muchos tipos de aserción (Boost no tiene nada en xUnit ++)
  • Compara colecciones de forma nativa.
  • Las afirmaciones vienen en tres niveles:
    • Errores fatales
    • errores no fatales
    • advertencias
  • Assert.Equal(-1, foo(i)) << "Failed with i = " << i; aserciones : Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • Log.Debug << "Starting test"; Log.Warn << "Here''s a warning"; prueba : Log.Debug << "Starting test"; Log.Warn << "Here''s a warning"; Log.Debug << "Starting test"; Log.Warn << "Here''s a warning";
  • Accesorios
  • Pruebas basadas en datos (teorías)
  • Seleccione qué pruebas ejecutar según:
    • Correspondencia de atributos
    • Nombre subcadena matchin
    • Suites de prueba

Un nuevo jugador es Google Test (también conocido como Google C ++ Testing Framework ) que es bastante bueno.

#include <gtest/gtest.h> TEST(MyTestSuitName, MyTestCaseName) { int actual = 1; EXPECT_GT(actual, 0); EXPECT_EQ(1, actual) << "Should be equal to one"; }

Principales características:

  • Portátil
  • Afirmaciones fatales y no fatales
  • Mensajes informativos de afirmaciones sencillas: ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • Google Test detecta automáticamente sus pruebas y no requiere que las enumere para ejecutarlas
  • Facilita la extensión de tu vocabulario de afirmación.
  • Pruebas de muerte (ver guía avanzada)
  • SCOPED_TRACE para bucles de subrutina
  • Usted puede decidir qué pruebas ejecutar
  • Generación de informes de prueba XML
  • Accesorios / Simulacros / Plantillas ...



API Sanity Checker : marco de prueba para bibliotecas C / C ++:

Un generador automático de pruebas de unidades básicas para una biblioteca compartida de C / C ++. Puede generar datos de entrada razonables (en la mayoría, pero desafortunadamente, no todos) de los parámetros y componer casos de prueba simples (de "cordura" o "poco profundos") para cada función en la API mediante el análisis de declaraciones en el encabezado archivos.

La calidad de las pruebas generadas permite verificar la ausencia de errores críticos en casos de uso simples. La herramienta es capaz de generar y ejecutar pruebas generadas y detectar fallos (errores), abortos, todo tipo de señales emitidas, código de retorno de programa distinto de cero y bloqueo del programa.

Características únicas en comparación con CppUnit, Boost y Google Test:

  • Generación automática de datos de prueba y argumentos de entrada (incluso para tipos de datos complejos)
  • Tipos especializados modernos y altamente reutilizables en lugar de accesorios y plantillas

CppUTest - muy agradable, marco de peso ligero con bibliotecas simuladas. Vale la pena echar un vistazo más de cerca.


Boost Test Library es una muy buena opción, especialmente si ya estás usando Boost.

// TODO: Include your class to test here. #define BOOST_TEST_MODULE MyTest #include <boost/test/unit_test.hpp> BOOST_AUTO_TEST_CASE(MyTestCase) { // To simplify this example test, let''s suppose we''ll test ''float''. // Some test are stupid, but all should pass. float x = 9.5f; BOOST_CHECK(x != 0.0f); BOOST_CHECK_EQUAL((int)x, 9); BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001% }

Es compatible con:

  • Registro de pruebas automático o manual.
  • Muchas afirmaciones
  • Comparación automática de colecciones
  • Varios formatos de salida (incluyendo XML )
  • Accesorios / Plantillas ...

PD: escribí un artículo sobre el tema que puede ayudarte a comenzar: Marco de prueba de unidad de C ++: tutorial de Boost Test