2010-06-23 21 views
14

He estado usando CppUnit desde hace bastante tiempo (y estoy contento con él). Como usamos más y más partes de la biblioteca de impulso, eché un vistazo a boost.test y me pregunto ahora si debería cambiar a boost.test en un nuevo proyecto o no.boost.test vs. CppUnit

¿Alguien me puede decir acerca de las diferencias entre los dos marcos y los beneficios (si los hay) del uso de boost.test?

+4

Probablemente encontrará las respuestas a http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks útiles. –

+0

@Alex: gracias por su publicación, hay algunos enlaces realmente útiles en él – chrmue

+0

Buen enlace, AAlex, +1. @chrmue, para aclarar: ¿la comparación que estás buscando supone un usuario de Boost o no? ¿Estás preguntando "si uso Boost para desarrollar, entonces hay una ventaja de usar texto de Boost?" ¿o solo estás buscando una comparación directa? – Mawg

Respuesta

17

Hazte un favor e ir directamente a Google Test, lo que hace que CppUnit y boost::unit_test parezcan torpes y repetitivos.

Por ejemplo, supongamos que tiene un accesorio simple:

class MyFixture : public ::testing::Test 
{ 
    protected: 
    int foo; 

    virtual void SetUp() { foo = 0; } 
}; 

Para agregar una prueba para su accesorio, escribirlo!

TEST_F(MyFixture, FooStartsAtZero) { 
    EXPECT_EQ(0, foo); 
} 

Eso es todo lo que necesita. Observe la falta de declaraciones explícitas de la suite de pruebas o una agenda separada que repite todos los nombres de sus pruebas.

Compilarlo como en

$ g++ -o utest utest.cpp -lgtest -lgtest_main

y ejecutar la prueba para obtener

Running main() from gtest_main.cc 
[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from MyFixture 
[ RUN  ] MyFixture.FooStartsAtZero 
[  OK ] MyFixture.FooStartsAtZero (0 ms) 
[----------] 1 test from MyFixture (0 ms total) 

[----------] Global test environment tear-down 
[==========] 1 test from 1 test case ran. (0 ms total) 
[ PASSED ] 1 test.

(ejecutarlo usted mismo para ver el buen texto en verde para pasar las pruebas!)

esto es sólo el principio. Eche un vistazo a Google Test primer y advanced guide para ver qué más es posible.

+1

+1 Me estaba haciendo la misma pregunta, y esta respuesta me ha llevado a mirar Google Test. Gracias. – Mawg

+0

¡Gracias por publicar esta respuesta! Realmente no responde mi pregunta, pero me señaló un marco de prueba de unidad que aún no sabía y que parece realmente prometedor. Lo que más me gusta a primera vista es la forma en que se expresan los casos de prueba: ¡la forma más corta posible! – chrmue

+0

@chrmue ¡Gracias por considerarlo! Estará encantado con el poder y la expresividad de Google Test. –

41

¿Cómo es que esto sea menos torpe que Boost.Test alternativa:

class MyFixture { MyFixture() { /* setup here */} }; 

BOOST_AUTO_TEST_CASE(my_test, MyFixture) 
{ 
    BOOST_CHECK_EQUAL(0, foo); 
} 

macros de hecho un poco más, pero esto es más seguro y es una práctica recomendada en C++.

Todavía tengo que ver una sola razón técnica para preferir la prueba de Google (y sé bastantes que prefieren Boost.Test). El resto es solo tu preferencia.

+4

Utilizo Boost.Test mucho. ¿Puedes dar más detalles sobre "Sé bastantes que prefieren Boost.Test"? –

+9

También tiene curiosidad por saber por qué prefiere Boost.Test. ¿Cuáles son las ventajas sobre googletest? – Eloff

+3

¿Cuáles son esas ventajas? – Etherealone

Cuestiones relacionadas