[B]asic module for [unit] program testing:
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Defines
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Friends
TestCase Class Reference

Every test case is an instance derived from this abstract class. More...

#include <BUnit.h>

Inheritance diagram for TestCase:
ADH::test_Graph test0 test1 test_BUnit test_rational< INT > TestSuite< TestCase >

List of all members.

Public Member Functions

 TestCase (const char *name=0)
 Constructor.
virtual ~TestCase ()
 Destructor.
virtual bool run ()=0
 [virtual] ==> Executes test and returns "false" if not successful.
void runBare ()
 Excecutes the test run setUp(); run(); tearDown();.
bool Run ()
 Synonym for run().
bool runTest ()
 Synonym for run().
virtual void setUp ()
 Sets the environment for the test run.
virtual void tearDown ()
 Destroys the test environment.
int countTestCases () const
 1 == Number of test cases.
int runCount () const
 Number of test runs.
virtual int failureCount () const
 Number of test runs that failed.
int errorCount () const
 Always returns 0 (cero): "Number of errors".
virtual int successCount () const
 Number of successful test runs.
bool wasSuccessful () const
 Returns "true" when all test runs where successful.
virtual void reset ()
 Discards all test runs.
std::string getName () const
 Gets the test case name.
void setName (const char *name=0)
 Sets the test case name to "name".
virtual const std::string toString () const
 Huuuge string that holds a copy of non successfull test, separated by "\n".
virtual const std::string summary () const
 Returns a string with the name, number of successes and failures.
virtual const std::string toXML () const
 XML string that holds a copy of all unsuccessful tests.
const std::string report () const
 Returns string summary() followed by toString().
const std::string failureString () const
 Synonym for toString().

Static Public Member Functions

template<class T >
static std::string toString (const T &val)
 Returns a std::string constructed form value val.

Protected Member Functions

void recordSuccess ()
 Records the test run as a success.
void recordFailure (const char *label, const char *fname, int lineno, bool must_copy=false)
 Records that the test run did not succeed.
void recordFailure (const std::string &label, const char *fname, int lineno)
 Records that the test did not succeed.
void testThis (bool cond, const char *label, const char *fname, long lineno, bool must_copy=false)
 Executes the test and records its result.
void testThis (bool cond, const std::string &label, const char *fname, long lineno)
 Synonym for testThis().
int nPass () const
 Synonym for successCount() [OBSOLETE].
int nError () const
 Synonym for failureCount() [OBSOLETE].

Protected Attributes

int m_pass
 Number of successful tests.
int m_failure
 Number of test that produced failed.
const char * m_name
 Test case name.
bool m_test_suite_destroy
 Holds "true" if the test case is stored in dynamic memory.
std::list< TestCaseFailurem_failureList
 Container where test cases that produced failures are stored.

Private Member Functions

virtual bool iAmTestSuite () const
 Returns false for TestCase.
 TestCase (const TestCase &)
 This "private" declaration forbids test case copying.
TestCaseoperator= (const TestCase &)
 This "private" declaration forbids test case copying.

Friends

class TestSuite
 Colección de pruebas.
class test_BUnit
 Test case class for BUnit.h.
template<class TestCase >
void do_toXML (const TestCase *tc, std::basic_ostringstream< char > &ost)
 Adds to ost the string of al unsuccessful test from *tc in XML format.
template<class TestCase >
void do_toString (const TestCase *tc, std::basic_ostringstream< char > &ost)
 Adds to ost the string of al unsuccessful test from *tc.

Detailed Description

Every test case is an instance derived from this abstract class.

Definition at line 111 of file BUnit.h.


Constructor & Destructor Documentation

TestCase::TestCase ( const char *  name = 0) [inline]

Constructor.

If no name is given to this constructor in "name", later the name will be obtained invoking typeid(*this).name().

    {{  // test::constructor()
        test_BUnit thisTest;
        assertTrue( string::npos != thisTest.getName().find( "test_BUnit" ) );
        assertTrue( thisTest.failureCount() == 0 );
        assertTrue( thisTest.countTestCases() == 1 );
        assertTrue( thisTest.successCount() == 0 );
        assertTrue( thisTest.runCount() == 0 );
        assertTrue( thisTest.failureString() == "" );
    }}

See also:
test_BUnit::test_constructor()

Definition at line 701 of file BUnit.h.

TestCase::~TestCase ( ) [inline, virtual]

Destructor.

Definition at line 120 of file BUnit.h.

TestCase::TestCase ( const TestCase ) [private]

This "private" declaration forbids test case copying.


Member Function Documentation

bool TestCase::run ( ) [pure virtual]

[virtual] ==> Executes test and returns "false" if not successful.

[***] It is always mandatory to redefine method run().

See also:
runBare().

Implemented in TestSuite< TestCase >, test_rational< INT >, ADH::test_Graph, test1, test_BUnit, and test0.

void TestCase::runBare ( ) [inline]

Excecutes the test run setUp(); run(); tearDown();.

Reimplemented in TestSuite< TestCase >.

Definition at line 777 of file BUnit.h.

bool TestCase::Run ( ) [inline]

Synonym for run().

Definition at line 123 of file BUnit.h.

bool TestCase::runTest ( ) [inline]

Synonym for run().

Definition at line 124 of file BUnit.h.

void TestCase::setUp ( ) [inline, virtual]

Sets the environment for the test run.

Reimplemented in test_rational< INT >, ADH::test_Graph, and test1.

Definition at line 831 of file BUnit.h.

void TestCase::tearDown ( ) [inline, virtual]

Destroys the test environment.

Definition at line 839 of file BUnit.h.

int TestCase::countTestCases ( ) const [inline]

1 == Number of test cases.

The value returned always is one 1 because class TestCase represents a single test case. For the container TestSuite<> the value returned can be bigger than 1.

  • A "test case" is a class, derived from class TestCase.
  • A "test run" gets counted when either a specific test succeeds or fails.
  • A "test run" gets counted when protected method TestCase::testThis() is executed, either directly or through any BUnit "assert()" macro, as assertTrue(), fail_Msg(), assertEquals_Delta(), or others like BUnit_SUCCESS() or BUnit_TEST().
  • A "test case" ussually has many "test runs". A collection of "test cases" resided within an instance derived from class TestSuite<>.

Reimplemented in TestSuite< TestCase >.

Definition at line 127 of file BUnit.h.

int TestCase::runCount ( ) const [inline]

Number of test runs.

Definition at line 129 of file BUnit.h.

int TestCase::failureCount ( ) const [inline, virtual]

Number of test runs that failed.

See also:
reset().

Reimplemented in TestSuite< TestCase >.

Definition at line 130 of file BUnit.h.

int TestCase::errorCount ( ) const [inline]

Always returns 0 (cero): "Number of errors".

Definition at line 131 of file BUnit.h.

int TestCase::successCount ( ) const [inline, virtual]

Number of successful test runs.

See also:
reset().

Reimplemented in TestSuite< TestCase >.

Definition at line 132 of file BUnit.h.

bool TestCase::wasSuccessful ( ) const [inline]

Returns "true" when all test runs where successful.

Definition at line 134 of file BUnit.h.

void TestCase::reset ( ) [inline, virtual]

Discards all test runs.

  • Resets to cero al counters because the test case is left in the state it had when initially contructed.
  • Deletes the record for not successful tests.
  • Does not change the test case name.
        {{  // 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
        }}
    
    See also:
    test_BUnit::test_reset()

Reimplemented in TestSuite< TestCase >.

Definition at line 726 of file BUnit.h.

std::string TestCase::getName ( ) const [inline]

Gets the test case name.

See also:
setName().

Definition at line 731 of file BUnit.h.

void TestCase::setName ( const char *  name = 0) [inline]

Sets the test case name to "name".

  • When "name" is a null string or pointer, later typeid(*this).name() will be invoked to get the test´s name.
        {{  // 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
            }
        }}
    
    See also:
    test_BUnit::test_setName()

Definition at line 754 of file BUnit.h.

const std::string TestCase::toString ( ) const [inline, virtual]

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

Reimplemented in TestSuite< TestCase >.

Definition at line 1036 of file BUnit.h.

const std::string TestCase::summary ( ) const [inline, virtual]

Returns a string with the name, number of successes and failures.

Reimplemented in TestSuite< TestCase >.

Definition at line 1252 of file BUnit.h.

const std::string TestCase::toXML ( ) const [inline, virtual]

XML string that holds a copy of all unsuccessful tests.

    <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"/>

Reimplemented in TestSuite< TestCase >.

Definition at line 1083 of file BUnit.h.

const std::string TestCase::report ( ) const [inline]

Returns string summary() followed by toString().

Definition at line 142 of file BUnit.h.

const std::string TestCase::failureString ( ) const [inline]

Synonym for toString().

Definition at line 143 of file BUnit.h.

template<class T >
std::string TestCase::toString ( const T &  val) [static]

Returns a std::string constructed form value val.

Definition at line 1895 of file BUnit.h.

void TestCase::recordSuccess ( ) [inline, protected]

Records the test run as a success.

Definition at line 146 of file BUnit.h.

void TestCase::recordFailure ( const char *  label,
const char *  fname,
int  lineno,
bool  must_copy = false 
) [inline, protected]

Records that the test run did not succeed.

  • Values "fname" and "lineno" indicate the file and line where the test run is executed.
  • The values form "fname" and "lineno" are usuallly obtained invoking global macros "__FILE__" and "__LINE__".
  • "must_copy" forces a copy of string label to be created in dynamic memory. This dynamic memory will be destroyed when the test case gets destroyed or when method TestCase::reset() gets invoked.
  • Oftentimes string "label" is a constant string generated by the preprocessor macro using #cond; this string constant is not stored in dynamic memory and it must not be destroyed.

This method is invoked using macro BUnit_FAILURE().

Definition at line 945 of file BUnit.h.

void TestCase::recordFailure ( const std::string &  label,
const char *  fname,
int  lineno 
) [inline, protected]

Records that the test did not succeed.

  • En BUnit.h there is no difference between "failures" and "errors".

Definition at line 1004 of file BUnit.h.

void TestCase::testThis ( bool  cond,
const char *  label,
const char *  fname,
long  lineno,
bool  must_copy = false 
) [inline, protected]

Executes the test and records its result.

  • If the test is successful only increases the numbero of success successCount().
  • If the test is not successful reports in toString() this fact.
  • The result of the test is "cond".
  • Values "fname" and "lineno" show the file and line of the executed test.
  • Usuallyy "fname" and "lineno" are values obtained with global macros "__FILE__" and "__LINE__".
  • The value for "must_copy" indicates whether it is necessary to make a copy of string "label"; this copy will be destroyed when the record of not successful test is deleted.
  • Most of the time string "label" is a constant genertated by the preprocessor when using macro #cond its memory must not be returned. This method is invoked using 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() );
        }}
    
    See also:
    test_BUnit::test_testThis()

Definition at line 884 of file BUnit.h.

void TestCase::testThis ( bool  cond,
const std::string &  label,
const char *  fname,
long  lineno 
) [inline, protected]

Synonym for testThis().

Definition at line 901 of file BUnit.h.

int TestCase::nPass ( ) const [inline, protected]

Synonym for successCount() [OBSOLETE].

Deprecated:

Definition at line 162 of file BUnit.h.

int TestCase::nError ( ) const [inline, protected]

Synonym for failureCount() [OBSOLETE].

Deprecated:

Definition at line 163 of file BUnit.h.

bool TestCase::iAmTestSuite ( ) const [inline, private, virtual]

Returns false for TestCase.

Reimplemented in TestSuite< TestCase >.

Definition at line 165 of file BUnit.h.

TestCase & TestCase::operator= ( const TestCase ) [private]

This "private" declaration forbids test case copying.


Friends And Related Function Documentation

friend class TestSuite [friend]

Colección de pruebas.

Definition at line 161 of file BUnit.h.

friend class test_BUnit [friend]

Test case class for BUnit.h.

Definition at line 174 of file BUnit.h.

template<class TestCase >
void do_toXML ( const TestCase tc,
std::basic_ostringstream< char > &  ost 
) [friend]

Adds to ost the string of al unsuccessful test from *tc in XML format.

Definition at line 1097 of file BUnit.h.

template<class TestCase >
void do_toString ( const TestCase tc,
std::basic_ostringstream< char > &  ost 
) [friend]

Adds to ost the string of al unsuccessful test from *tc.

Definition at line 1050 of file BUnit.h.


Member Data Documentation

int TestCase::m_pass [protected]

Number of successful tests.

Definition at line 113 of file BUnit.h.

int TestCase::m_failure [protected]

Number of test that produced failed.

Definition at line 114 of file BUnit.h.

const char * TestCase::m_name [protected]

Test case name.

Definition at line 115 of file BUnit.h.

Holds "true" if the test case is stored in dynamic memory.

Definition at line 116 of file BUnit.h.

std::list< TestCaseFailure > TestCase::m_failureList [protected]

Container where test cases that produced failures are stored.

Definition at line 117 of file BUnit.h.


The documentation for this class was generated from the following file: