2010-12-27 21 views
7

Estoy haciendo un proyecto en C++ en mi Universidad y tenemos que probar nuestras clases por unidades. Las pruebas son bastante sencillas: no tenemos clases "problemáticas" que se ocupen de bases de datos, GUI, material web, etc. Es solo un programa de línea de comando.Pruebas unitarias en C++

¿Qué es un buen marco de pruebas unitarias para usar que es lo más simple posible? Proporcione un breve ejemplo de una prueba en ese marco.

EDITAR: Veo que hay algunas respuestas, por lo que quiero añadir otra pregunta: ¿Dónde pongo los métodos de ensayo? ¿Están declarados en un archivo diferente? ¿Dónde estaría ese archivo? ¿Cómo ejecuto todas las pruebas?

+0

Cunit http://cunit.sourceforge.net/documentation.html – DumbCoder

Respuesta

8

Boost. Manos abajo.

#define BOOST_TEST_MODULE my_tests // use once per test program 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_CASE(case_x) 
{ 
    .... 
    BOOST_CHECK(... boolean expression ...); 
    BOOST_etc...etc... 
} 
+1

Puede por favor dar algunos detalles más sobre dónde colocar este archivo, es que '' .cpp' o .h', etc. ? –

+0

Es .cpp - "basura superflua para completar los requisitos de comentarios" –

+0

¿cómo la compilo? ¿Con un archivo MAKE diferente? ¿Qué debería estar en el archivo MAKE? ¿Hay algo que necesite codificar, excepto los casos de prueba? ¿Es un ejecutable? Ejecuta la prueba en la compilación? –

5

Hay muchos, bastante similares. Mi preferida es la biblioteca Boost.Test. Puede ser complicado si lo necesitas pero también extremadamente simple para casos simples. p.ej. el caso más simple posible es así:

#include <boost/test/minimal.hpp> 

int add(int i, int j) { return i+j; } 

    int test_main(int, char *[])    // note the name! 
    { 
     // six ways to detect and report the same error: 
     BOOST_CHECK(add(2,2) == 4);  // #1 continues on error 
     BOOST_REQUIRE(add(2,2) == 4);  // #2 throws on error 
     if(add(2,2) != 4) 
      BOOST_ERROR("Ouch...");   // #3 continues on error 
     if(add(2,2) != 4) 
      BOOST_FAIL("Ouch...");    // #4 throws on error 
     if(add(2,2) != 4) throw "Oops..."; // #5 throws on error 

     return add(2, 2) == 4 ? 0 : 1;  // #6 returns error code 
    } 

En este ejemplo se utiliza el Minimal Testing Facility.

+0

Bueno, poner tus pruebas en el método principal es una mala práctica., .. –

+4

Si no hay una buena razón para hacerlo, deberías enlazar a la versión más reciente de Boost, que es 1.45. –

+0

@ BjörnPollex: ¿sabes si hay un enlace independiente de la versión para los documentos de Boost? Porque no encontré uno, y me gustaría evitar la actualización de enlaces a todas las respuestas relacionadas con Boost cuando Boost lanza una nueva versión. –

3

Google Test es excelente. Me gusta la escritura real de las pruebas un poco menos que Boost (UTF de boost es EXCELENTE), pero produce registros de consola bonitos con colores y tal en Windows y en la mayoría de las plataformas POSIX.

+0

Y hay una GUI útil para ello llamada [Guitar] (http://code.google.com/p/gtest-gbar/). – Nate

1

This tiene una buena visión general de varias opciones de prueba de unidad cuando se está programando en C++.

+0

El problema con este artículo es que está bastante desactualizado. La prueba de Google, por ejemplo, ni siquiera se considera, y varias de las quejas contra cada uno de los marcos de prueba respectivos se han resuelto. –

1

en mi humilde opinión, UnitTest+ + es lo que busca:

unittest ++ es una unidad marco de pruebas de peso ligero para C++.

Fue diseñado para desarrollar basado en pruebas en una amplia variedad de plataformas . La simplicidad, la portabilidad, la velocidad y la huella pequeña son todos aspectos muy importantes de UnitTest ++ .

#include "stdafx.h" 
#include "UnitTest++.h" 

TEST(HelloUnitTestPP) 
{ 
    CHECK(false); 
} 

int main(int, char const *[]) 
{ 
    return UnitTest::RunAllTests(); 
}