Modulo [B]asico para prueba [unit]aria de programas:
|
Métodos públicos | |
bool | run () |
Main testing method. | |
void | test_constructor () |
test_BUnit ==> TestCase::TestCase (...). | |
void | test_reset () |
test_BUnit ==> TestCase::reset() + TestCase::resetTests() . | |
void | test_addTest () |
test_BUnit ==> TestSuite<TestCase>::addTest() . | |
void | test_run () |
test_BUnit ==> run() + runBare() . | |
void | test_setName () |
test_BUnit ==> getName() + setName() . | |
void | test_testThis () |
test_BUnit ==> testThis() . | |
void | test_BUnit_macro () |
test_BUnit ==> Macros. | |
void | test_assertTrue_Msg () |
test_BUnit ==> assertTrue_Msg() . | |
void | test_Allison () |
test_BUnit ==> test_Allison() . | |
void | runBare () |
Ejecuta la prueba setUp(); run(); tearDown(); . | |
bool | Run () |
Sinónimo de run() . | |
bool | runTest () |
Sinónimo de run() . | |
virtual void | setUp () |
Establece el ambiente en que se realizará la prueba. | |
virtual void | tearDown () |
Destruye el ambiente de prueba. | |
int | countTestCases () const |
1 == Cantidad de casos de prueba. | |
int | runCount () const |
Cantidad total de pruebas realizadas. | |
virtual int | failureCount () const |
Cantidad de pruebas que fallaron. | |
int | errorCount () const |
Siempre retorna 0 (cero): "Cantidad de errores". | |
virtual int | successCount () const |
Cantidad de pruebas exitosas. | |
bool | wasSuccessful () const |
Retorna "true" si todas las pruebas han sido exitosas. | |
virtual void | reset () |
Elimina todas las pruebas realizadas. | |
std::string | getName () const |
Obtiene el nombre de la prueba. | |
void | setName (const char *name=0) |
Le cambia el nombre a la prueba por "name" . | |
virtual const std::string | toString () const |
Hilera "enooorme" que contiene copia del registro de pruebas no exitosas, separados por "\n" . | |
virtual const std::string | summary () const |
Retorna un hilera que contiene el nombre, cantidad de éxitos y fallas. | |
virtual const std::string | toXML () const |
Hilera XML que contiene una copia de las pruebas no exitosas. | |
const std::string | report () const |
Retorna la hilera encabezado summary() seguido toString() . | |
const std::string | failureString () const |
Sinónimo de toString() . | |
Métodos públicos estáticos | |
template<class T > | |
static std::string | toString (const T &val) |
Retorna una hilera std::string contruida desde el valor de val . | |
Métodos protegidos | |
void | recordSuccess () |
Registra como exitoso el resultado de una prueba. | |
void | recordFailure (const char *label, const char *fname, int lineno, bool must_copy=false) |
Registra que la prueba no tuvo éxito. | |
void | recordFailure (const std::string &label, const char *fname, int lineno) |
Registra que la prueba no tuvo éxito. | |
void | testThis (bool cond, const char *label, const char *fname, long lineno, bool must_copy=false) |
Efectúa la prueba y registra su resultado. | |
void | testThis (bool cond, const std::string &label, const char *fname, long lineno) |
Sinónimo de testThis() . | |
int | nPass () const |
Sinónimo de successCount() [OBSOLETO]. | |
int | nError () const |
Sinónimo de failureCount() [OBSOLETO]. | |
Atributos protegidos | |
int | m_pass |
Cantidad de pruebas exitosas. | |
int | m_failure |
Cantidad de pruebas que han fallado. | |
const char * | m_name |
Nombre del caso de prueba. | |
bool | m_test_suite_destroy |
Contiene "true" si la prueba está almacenada en memoria dinámica. | |
std::list< TestCaseFailure > | m_failureList |
Contenedor para almacenar las pruebas que han producido fallas. | |
Amigas | |
class | TestSuite |
Colección de pruebas. | |
template<class TestCase > | |
void | do_toXML (const TestCase *tc, std::basic_ostringstream< char > &ost) |
Le agrega a ost la hilera de todas las pruebas no exitosas de *tc en formato XML. | |
template<class TestCase > | |
void | do_toString (const TestCase *tc, std::basic_ostringstream< char > &ost) |
Le agrega a ost la hilera de todas las pruebas no exitosas de *tc . |
Testing BUnit.h
.
Definición en la línea 15 del archivo test_BUnit.cpp.
bool test_BUnit::run | ( | ) | [virtual] |
void test_BUnit::test_constructor | ( | ) |
test_BUnit ==> TestCase::TestCase
(...).
Definición en la línea 45 del archivo test_BUnit.cpp.
void test_BUnit::test_reset | ( | ) |
test_BUnit ==> TestCase::reset()
+ TestCase::resetTests()
.
Definición en la línea 65 del archivo test_BUnit.cpp.
void test_BUnit::test_addTest | ( | ) |
test_BUnit ==> TestSuite<TestCase>::addTest()
.
SSS se queda vacío
Definición en la línea 97 del archivo test_BUnit.cpp.
void test_BUnit::test_run | ( | ) |
test_BUnit ==> run()
+ runBare()
.
Definición en la línea 170 del archivo test_BUnit.cpp.
void test_BUnit::test_setName | ( | ) |
test_BUnit ==> getName()
+ setName()
.
Definición en la línea 200 del archivo test_BUnit.cpp.
void test_BUnit::test_testThis | ( | ) |
test_BUnit ==> testThis()
.
Definición en la línea 225 del archivo test_BUnit.cpp.
void test_BUnit::test_BUnit_macro | ( | ) |
test_BUnit ==> Macros.
Definición en la línea 249 del archivo test_BUnit.cpp.
void test_BUnit::test_assertTrue_Msg | ( | ) |
test_BUnit ==> assertTrue_Msg()
.
Definición en la línea 291 del archivo test_BUnit.cpp.
void test_BUnit::test_Allison | ( | ) |
test_BUnit ==> test_Allison()
.
{{ // test::Allison() // Stack class for letter -- very simple (<em>Last In First Out</em>). // - Throws \c std::logic_error on invalid operations. // - Example inspired in Chuck Allison' work. // - http://search.yahoo.com/search?n=100&p=Simplest+Unit+Test+Allison class Stack { public: enum { N = 5 /* Max Capacity for the stack */ }; // Constructor for a stack that can hold up to \c "Stack::N" values. Stack() : m_top(0) { m_vec[m_top] = 0; } // Stoes a copy of "v" at the top of the stack. void push(const char& v) { if ( m_top != N ) { m_vec[m_top] = v; m_top++; } else { throw std::out_of_range("Stack::push()"); } } // Removes the topmost value from the stack. void pop() { if ( m_top>0 ) { m_top--; } else { throw std::out_of_range("Stack::pop()"); } } // Reference to topmost value in the stack. char& top() { if ( m_top>0 ) { return m_vec[m_top-1]; } else { throw std::out_of_range("Stack::top()"); } } // Number of values stored in the stack. unsigned size() const { return m_top; } private: char m_vec[N+1] ; // Vector to hold stored values. int m_top; // Next available vector entry. }; // Stack class MyTest : public TestCase { public: bool run() { Stack S; // the stack try { // empty stack S.pop(); fail_Msg("! S.pop()"); } catch ( std::out_of_range & ex ) { assertTrue( 0 == strcmp( ex.what() , "Stack::pop()" ) ); // Ok: empty stack } catch (...) { fail_Msg("! ( std::out_of_range & )"); } try { // Pila llena for (int i=0; true; ++i) { S.push('0'+i); assertTrue( S.top() == '0'+i ); } fail_Msg("! S.push()"); } catch ( std::out_of_range & ex ) { assertTrue( 0 == strcmp( ex.what() , "Stack::push()" ) ); // Ok: full stack } catch (...) { fail_Msg("! ( std::out_of_range & )"); } try { // Vacea la pila for (int i=Stack::N-1; true; --i) { assertTrue( S.top() == '0'+i ); S.pop(); } fail_Msg("! S.pop()"); } catch ( std::out_of_range & ex ) { assertTrue( 0 == strcmp( ex.what() , "Stack::top()" ) ); // Ok: empty stack } catch (...) { fail_Msg("! ( std::out_of_range & )"); } return wasSuccessful(); } }; // MyTest MyTest thisTest; thisTest.run(); // 0 failures assertTrue( thisTest.wasSuccessful() ); }}
Definición en la línea 330 del archivo test_BUnit.cpp.
void TestCase::runBare | ( | ) | [inline, inherited] |
Ejecuta la prueba setUp(); run(); tearDown();
.
run()
, este método sí establece el ambiente de prueba invocando setUp()
y tearDown()
antes y después de hacer la prueba. {{ // test::run() class MyTest : public TestCase { int m_val; public: MyTest() : m_val(0) {} // init: m_val == 0; void setUp() { m_val = 1; } void tearDown() { m_val = 2; } bool run() { assertTrue( m_val == 1 ); return wasSuccessful(); } }; // MyTest TestSuite<TestCase> SSS; SSS.addTest( new MyTest ); SSS.addTest( new MyTest ); assertTrue( 2 == SSS.countTestCases() ); assertTrue( "" == SSS.failureString() ); SSS.runBare(); // Ok ==> setUp() sets [m_val == 1] assertTrue( "" == SSS.toXML() ); SSS.run(); // Failure: [m_val == 2] ==> value set by tearDown() std::string sssXML = SSS.toXML(); assertTrue( "" != sssXML ); // SSS contains failures. assertTrue( sssXML.find("m_val") != string::npos ); assertTrue( SSS.runCount() == 2+2 ); }}
Reimplementado en TestSuite< TestCase >.
bool TestCase::Run | ( | ) | [inline, inherited] |
bool TestCase::runTest | ( | ) | [inline, inherited] |
void TestCase::setUp | ( | ) | [inline, virtual, inherited] |
Establece el ambiente en que se realizará la prueba.
TestCase::run()
es un método abstracto, para facilitar la programación lo usual es que el programador no incluya invocaciones a TestCase::setUp()
y TestCase::tearDown()
pues es más fácil dejar que lo haga TestSuite<TestCase>::runBare()
.TestCase::runBare()
, el método TestCase::run()
no establece el ambiente de prueba porque no invoca ni a TestCase::setUp()
antes de la prueba ni a TestCase::tearDown()
después de la prueba.TestSuite<TestCase>::runBare()
invoca los métodos TestCase::setUp()
y TestCase::tearDown()
cuando ejecuta cada prueba.TestSuite
para ejecutarlas con TestSuite<TestCase>::runBare()
. Reimplementado en test_rational< INT >, ADH::test_Graph y test1.
void TestCase::tearDown | ( | ) | [inline, virtual, inherited] |
int TestCase::countTestCases | ( | ) | const [inline, inherited] |
1 == Cantidad de casos de prueba.
El valor retornado siempre es uno 1
porque la clase TestCase
representa un único caso de pruebas. Para el contenedor TestSuite<>
el valor retornado puede ser mayor a 1
.
TestCase
."assert()"
de BUnit, como lo son assertTrue()
, fail_Msg()
, assertEquals_Delta()
, u otros como BUnit_SUCCESS()
or BUnit_TEST()
.TestSuite<>
. Reimplementado en TestSuite< TestCase >.
int TestCase::runCount | ( | ) | const [inline, inherited] |
Cantidad total de pruebas realizadas.
successCount()+failureCount()+errorCount()
. int TestCase::failureCount | ( | ) | const [inline, virtual, inherited] |
int TestCase::errorCount | ( | ) | const [inline, inherited] |
Siempre retorna 0
(cero): "Cantidad de errores".
int TestCase::successCount | ( | ) | const [inline, virtual, inherited] |
bool TestCase::wasSuccessful | ( | ) | const [inline, inherited] |
Retorna "true"
si todas las pruebas han sido exitosas.
(successCount() == runCount())
void TestCase::reset | ( | ) | [inline, virtual, inherited] |
Elimina todas las pruebas realizadas.
{{ // test::reset() class MyTest : public TestCase { public: bool run() { assertTrue( 1 == 2 ); // Failure !!! assertTrue( 1 == 1 ); // Ok assertTrue( 2 == 2 ); // Ok return wasSuccessful(); } }; // MyTest MyTest thisTest; for ( int i=0; i<11; ++i ) { thisTest.run(); // runs the same test 11 times } assertTrue( 11 == thisTest.failureCount() ); // ( 1 == 2 ) x 11 assertTrue( 22 == thisTest.successCount() ); // ( 1 == 1 ) && ( 2 == 2 ) assertTrue( 33 == thisTest.runCount() ); // 33 == 11+22 assertTrue( "" != thisTest.failureString() ); // 11 recorded failures std::string remember = thisTest.getName(); thisTest.reset(); // Anula los contadores assertTrue( 0 == thisTest.failureCount() ); assertTrue( 0 == thisTest.successCount() ); assertTrue( 0 == thisTest.runCount() ); assertTrue( "" == thisTest.failureString() ); assertTrue( remember == thisTest.getName() ); // reset() won´t change the name }}
Reimplementado en TestSuite< TestCase >.
std::string TestCase::getName | ( | ) | const [inline, inherited] |
void TestCase::setName | ( | const char * | name = 0 | ) | [inline, inherited] |
Le cambia el nombre a la prueba por "name"
.
"name"
es una hilera o puntero nulo, después usa typeid(*this).name()
para obtener el nombre de la prueba. {{ // test::setName() class MyTest : public TestCase { public: bool run() { assertTrue( 2 == 2 ); return wasSuccessful(); } }; // MyTest MyTest thisTest; assertTrue( "chorlito" != thisTest.getName() ); thisTest.setName( "chorlito" ); assertTrue( "chorlito" == thisTest.getName() ); { // thisTest.setName( std::string("chorlito") ); // won´t compile thisTest.setName( std::string("chorlito").c_str() ); // bad practice std::string V("boom!"); assertTrue( 0==strcmp( V.c_str() , "boom!") ); assertTrue( "chorlito" != thisTest.getName() ); // c_str() uses assertTrue( "boom!" == thisTest.getName() ); // static data } }}
const std::string TestCase::toString | ( | ) | const [inline, virtual, inherited] |
Hilera "enooorme" que contiene copia del registro de pruebas no exitosas, separados por "\n"
.
Huuuge string that holds a copy of non successfull test, separated by "\n"
.
=_fail: 1 == 0 =/ (125) X:/DIR/SubDir/test_BUnit.cpp =_fail: 4 == 0 =/ (128) X:/DIR/SubDir/test_BUnit.cpp
Reimplementado en TestSuite< TestCase >.
std::string TestCase::toString | ( | const T & | val | ) | [static, inherited] |
Retorna una hilera std::string
contruida desde el valor de val
.
toString()
with standard C++ const std::string TestCase::summary | ( | ) | const [inline, virtual, inherited] |
Retorna un hilera que contiene el nombre, cantidad de éxitos y fallas.
Reimplementado en TestSuite< TestCase >.
const std::string TestCase::toXML | ( | ) | const [inline, virtual, inherited] |
Hilera XML que contiene una copia de las pruebas no exitosas.
<fail file="X:/DIR/SubDir/test_BUnit.cpp" line="125" message="1 == 0"/> <fail file="X:/DIR/SubDir/test_BUnit.cpp" line="128" message="4 == 0"/>
Reimplementado en TestSuite< TestCase >.
const std::string TestCase::report | ( | ) | const [inline, inherited] |
Retorna la hilera encabezado summary()
seguido toString()
.
const std::string TestCase::failureString | ( | ) | const [inline, inherited] |
Sinónimo de toString()
.
void TestCase::recordSuccess | ( | ) | [inline, protected, inherited] |
void TestCase::recordFailure | ( | const char * | label, |
const char * | fname, | ||
int | lineno, | ||
bool | must_copy = false |
||
) | [inline, protected, inherited] |
Registra que la prueba no tuvo éxito.
"fname"
y "lineno"
indican el archivo y el renglón en donde se ejecuta la prueba."fname"
y "lineno"
se obtienen invocando las macros globales "__FILE__"
y "__LINE__"
."must_copy"
indica que es necesario hacer una copia de la hilera "label"
en memoria dinámica. Este memoria dinámica será destruida cuando el caso de prueba sea destruido o cuando el método TestCase::reset()
sea invocado."label"
es una constante generada por el preprocesador al usar la macro #cond
; como esta hilera constante no está almacenada en la memoria dinámica no debe ser destruida.Este método es invocado usando la macro BUnit_FAILURE()
.
void TestCase::recordFailure | ( | const std::string & | label, |
const char * | fname, | ||
int | lineno | ||
) | [inline, protected, inherited] |
void TestCase::testThis | ( | bool | cond, |
const char * | label, | ||
const char * | fname, | ||
long | lineno, | ||
bool | must_copy = false |
||
) | [inline, protected, inherited] |
Efectúa la prueba y registra su resultado.
successCount()
.toString()
ese hecho."cond"
."fname"
y "lineno"
indican el archivo y el renglón en donde se ejecuta la prueba."fname"
y "lineno"
se obtienen con las macros globales "__FILE__"
y "__LINE__"
."must_copy"
indica que es necesario hacer una copia de la hilera "label"
, copia que será destruida cuando el registro de pruebas no exitosas sea borrado."label"
es una constante generada por el preprocesador al usar la macro #cond
y por eso su memoria no debe ser retornada. Este método es invocado usando la macro BUnit_TEST()
. {{ // test::testThis() class MyTest : public TestCase { public: bool run() { bool dont_copy = false; testThis( 2 == 2, "2 is 2", __FILE__, __LINE__, dont_copy ); // Ok testThis( 1 == 2, "1 is 2", __FILE__, __LINE__, dont_copy ); // failure #1 testThis( 2 == 1, "2 is 1", __FILE__, __LINE__, dont_copy ); // failure #2 return wasSuccessful(); } }; // MyTest MyTest thisTest; assertTrue( thisTest.wasSuccessful() ); // run() has not been executed thisTest.run(); // 2 failures assertTrue( thisTest.failureCount() == 2 ); assertTrue( ! thisTest.wasSuccessful() ); }}
void TestCase::testThis | ( | bool | cond, |
const std::string & | label, | ||
const char * | fname, | ||
long | lineno | ||
) | [inline, protected, inherited] |
Sinónimo de testThis()
.
int TestCase::nPass | ( | ) | const [inline, protected, inherited] |
int TestCase::nError | ( | ) | const [inline, protected, inherited] |
friend class TestSuite [friend, inherited] |
void do_toString | ( | const TestCase * | tc, |
std::basic_ostringstream< char > & | ost | ||
) | [friend, inherited] |
int TestCase::m_pass [protected, inherited] |
int TestCase::m_failure [protected, inherited] |
const char * TestCase::m_name [protected, inherited] |
bool TestCase::m_test_suite_destroy [protected, inherited] |
std::list< TestCaseFailure > TestCase::m_failureList [protected, inherited] |