2010-05-25 10 views
32

El Boost.Test documentation y los ejemplos realmente no parecen contener ningún ejemplo no trivial y hasta ahora los dos tutoriales que encontré here y here me ayudaron son ambos bastante básicos.Boost.Test: Buscando un Test Suite no Trivial que funcione Ejemplo/Tutorial

Me gustaría tener un conjunto de pruebas maestras para todo el proyecto, manteniendo al mismo tiempo por módulo suites de pruebas unitarias y accesorios que se pueden ejecutar de forma independiente. También utilizaré un servidor simulado para probar varios casos de borde de red.

Estoy en Ubuntu 8.04, pero tomaré cualquier ejemplo de Linux o Windows ya que estoy escribiendo mis propios makefiles de todos modos.

Editar

Como prueba que hice lo siguiente:

// test1.cpp 
#define BOOST_TEST_MODULE Regression 
#include <boost/test/included/unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(test1_suite) 

BOOST_AUTO_TEST_CASE(Test1) 
{ 
    BOOST_CHECK(2 < 1); 
} 

BOOST_AUTO_TEST_SUITE_END() 

// test2.cpp 
#include <boost/test/included/unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(test2_suite) 

BOOST_AUTO_TEST_CASE(Test1) 
{ 
    BOOST_CHECK(1<2); 
} 

BOOST_AUTO_TEST_SUITE_END() 

Entonces compilo: g++ test1.cpp test2.cpp -o tests

Esto me da alrededor de un bazillion "definición múltiplo de" errores durante la vinculación .

Cuando todo está en un solo archivo funciona bien.

+0

El variant_ cabecera _single de UTF, que está utilizando, sólo funciona para una sola fila. Este 'pequeño detalle' está [documentado] (http://www.boost.org/doc/libs/1_56_0/libs/test/doc/html/utf/user-guide/usage-variants/single-header-variant). html): _Esta variante no se puede usar con el módulo de prueba de archivos múltiples. –

Respuesta

42

C++ Unit Testing With Boost.Test

Lo anterior es un artículo brillante y mejor que la documentación real Boost.

Editar:

También escribí un script en Perl que auto-generar el makefile y el proyecto esqueleto de una lista de nombres de clase, incluyendo tanto el "todo-en-uno" prueba suite y un conjunto de pruebas independiente para cada clase. Se llama makeSimple y se puede descargar desde Sourceforge.net.

Lo que me pareció ser el problema básico es que si desea dividir sus pruebas en varios archivos que hay que enlazar con el tiempo de ejecución de pruebas de pre-compilados y no utilizar la versión "sólo los encabezados" de Boost.Test . Debe agregar #define BOOST_TEST_DYN_LINK a cada archivo y al incluir los encabezados de Boost, por ejemplo, use <boost/test/unit_test.hpp> en lugar de <boost/test/included/unit_test.hpp>.

Así que para compilar como una sola prueba:

g++ test_main.cpp test1.cpp test2.cpp -lboost_unit_test_framework -o tests 

o para compilar una prueba individual:

g++ test1.cpp -DSTAND_ALONE -lboost_unit_test_framework -o test1 

.

// test_main.cpp 
#define BOOST_TEST_DYN_LINK 
#define BOOST_TEST_MODULE Main 
#include <boost/test/unit_test.hpp> 

// test1.cpp 
#define BOOST_TEST_DYN_LINK 
#ifdef STAND_ALONE 
# define BOOST_TEST_MODULE Main 
#endif 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(test1_suite) 

BOOST_AUTO_TEST_CASE(Test1) 
{ 
    BOOST_CHECK(2<1); 
} 

BOOST_AUTO_TEST_SUITE_END() 

// test2.cpp 
#define BOOST_TEST_DYN_LINK 
#ifdef STAND_ALONE 
# define BOOST_TEST_MODULE Main 
#endif 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_SUITE(test2_suite) 

BOOST_AUTO_TEST_CASE(Test1) 
{ 
    BOOST_CHECK(1<2); 
} 

BOOST_AUTO_TEST_SUITE_END() 
+0

Sería genial si pudieras editar tu enlace para que apuntara a la parte superior de la página, no a los comentarios. – danio

+0

@danio: editó el enlace y agregó un enlace a una secuencia de comandos de Perl que generará automáticamente el archivo MAKE, el esqueleto del proyecto y las suites de prueba unitarias. –

+0

Creo que este también es bueno: http://www.ibm.com/developerworks/aix/library/au-ctools1_boost/index.html – zack

8

No sé qué más necesitas de lo que está en el tutorial posterior. He hecho todo lo que necesito de esa manera. No estoy seguro de entender tu descripción tampoco.

Una cosa que podría estar pidiendo es la posibilidad de tener más de un archivo .cpp en su programa de prueba. Eso es tan simple como definir BOOST_TEST_MODULE en uno de esos archivos .cpp. Tenemos un archivo "driver.cpp" en todos nuestros programas de prueba que solo lo define e incluye el encabezado de prueba de la unidad. El resto de los archivos .cpp (delimitados por módulo o concepto) solo incluyen el encabezado de prueba de unidad, no definen esa variable.

Si desea poder compilarlos juntos y compilarlos por separado, entonces podría usar su propia variable -D para definir BOOST_TEST_MODULE o no.

Si está buscando una forma de ejecutar una serie de programas de prueba en una sola ejecución y obtener un informe, entonces podría ver el método de prueba automática o, mejor aún, el método CMake (CTest). Seguramente puede usar CTest desde su propio archivo MAKE si insiste.

+0

Como prueba, creé 2 archivos con conjuntos de pruebas automáticas y casos de prueba automática y definí 'BOOST_TEST_MODULE' en solo uno de los archivos. Durante la vinculación obtuve alrededor de un millón de "múltiples definiciones de" errores. Todo funciona bien cuando todo está en un solo archivo. –

+0

Pruebe sin las BOOST_AUTO_TEST_SUITE() definiciones. Yo no uso eso. Puede ser que haya pasos levemente diferentes que son necesarios si usa esa macro. Intentar eliminarlos resolverá su error de construcción si ese es el caso y luego, si los necesita, se necesitará más experimentación. Además, no nombre ambas pruebas Prueba1. He tenido problemas con eso cuando dos pruebas en diferentes archivos tienen el mismo nombre. De hecho, intenta arreglar eso primero. –

+0

Sí, después de revisar el enlace publicado a continuación en el comentario que incluye un código que se asemeja a su código de edición (y tiene dos definiciones de Prueba1), creo que esta definición múltiple de una prueba es el problema. El tutorial vinculado no comparte esta característica y utiliza diferentes nombres incluso dentro de diferentes suites. –

Cuestiones relacionadas