jueves, 25 de mayo de 2017

Testing en C++

El problema es fácil de plantear, debemos probar una clase en C++ en el entorno qt y deseamos hacerlo con el framework de unit test: UnitTest++

UnitTest ++ es un framework de testing para C ++. Fue diseñado para hacer desarrollo basado en pruebas en una amplia variedad de plataformas. La simplicidad, la portabilidad, la velocidad y la pequeña huella son aspectos muy importantes de UnitTest ++. UnitTest ++ es en su mayoría estándar C ++ y hace un uso mínimo de la biblioteca avanzada y características del lenguaje, lo que significa que debe ser fácilmente portátil a casi cualquier plataforma. Se puede instalar en  las siguientes plataformas:

  • Windows
  • Linux
  • Mac OS X


Desde Linux es fácil instalar el framework:

sudo apt-get install libunittest++-dev

o

sudo yum install  libunittest++-dev

Instalado este framework abrimos nuestro qt y nuestro proyecto, y agregamos en el .pro la siguiente linea: 

LIBS += -lunittest++

Con esta linea agregamos el framework de test y ahora podemos escribir un test, por lo tanto creamos un archivo .cpp nuevo y realizamos un test. 

En el siguiente ejemplo voy a testear una lista de enteros: 

#include <unittest++/UnitTest++.h>
#include "list.h"

TEST(sizeEquals1) {
    List list;
    CHECK(list.add(2));
    CHECK(list.getSize()==1);
}

TEST(sizeEquals2) {
    List list;
    CHECK(list.add(2));
    CHECK(list.add(2));
    CHECK(list.getSize()==2);
}

TEST(sizeEquals1WithRemove) {
    List list;
    CHECK(list.add(2));
    CHECK(list.add(2));
    CHECK(list.remove(2));
    CHECK(list.getSize()==1);
}

int main()
{
    return UnitTest::RunAllTests();
}
Y eso es todo, solo debemos correr el main y obtendremos el resultado de los tests, por ejemplo: 

../Collections/test.cpp:22: error: Failure in sizeEquals1WithRemove: list.getSize()==1
FAILURE: 1 out of 3 tests failed (1 failures).
Test time: 0.00 seconds.

Lo que esta diciendo aquí es que fallo el test sizeEquals1WithRemove. Y si todos los test terminan bien: 

Success: 3 tests passed.
Test time: 0.00 seconds.
Press <RETURN> to close this window...


Dejo link: