Unit Test

From AbiWiki

Revision as of 19:42, 12 October 2007 by Uwog (Talk | contribs)
Jump to: navigation, search

UnitTest is part of the TestingFramework. It performs basic testing of individual code units.

---+++ How to use

On Unix, simply run

make test

It will run under Valgrind if configure did detect it.

Here is the sample output of a test from a real bug:

<verbatim> Testing "UT_LocaleTransactor" in ut_locale.t.cpp: ! ut_locale.t.cpp:35 strstr(msg, "1,0") == msg ok ! ut_locale.t.cpp:37 strcmp(setlocale(LC_NUMERIC, NULL), "fr_FR") == 0 ok ! ut_locale.t.cpp:41 NOT(strcmp(setlocale(LC_NUMERIC, NULL), "fr_FR") == 0) ok ! ut_locale.t.cpp:43 strstr(msg, "1.0") == msg ok ! ut_locale.t.cpp:44 strcmp(setlocale(LC_NUMERIC, NULL), "C") == 0 ok ! ut_locale.t.cpp:46 strcmp(setlocale(LC_NUMERIC, NULL), "fr_FR") == 0 FAILED ! ut_locale.t.cpp:48 strstr(msg, "1,0") == msg FAILED ! tf_test.cpp:119 new_valgrind_errs == old_valgrind_errs ok memleaks: sure:112 dubious:800 reachable:451080 suppress:0 ! tf_test.cpp:123 new_valgrind_leaks == old_valgrind_leaks ok </verbatim>

As you can see, some test pass, some fails. The last 3 lines are for Valgrind. If they fail, then there is a Valgrind error in the code: a memory leak.

---+++ How to write some

Writing UnitTest is not really hard, if you understand the code. Sometime it is tricky because some classes are not meant to be used alone.

---++++ Directory structure

Every directory that contains code has a =t= directory the contains its test.

The support code for the UnitTest is in =abi/src/af/tf/xp/=.

The files are organized to match the source code files. They have the same name but with the =.t.cpp= suffix. (=.t.mm= for Objective-C++ file where applicable).

---++++ One test

Here is a sample test for =UT_Vector=:

<verbatim> TFTEST_MAIN("UT_GenericVector basics") {

                 UT_GenericVector<char *> v;
                 TFPASS(v.getItemCount() == 0);
                 v.addItem("foo");
                 TFFAIL(v.getItemCount() == 0);

} </verbatim>

=TFTEST_MAIN= is a macro to declare the test function.

=TFPASS()= is a macro to check some condition that should be true

=TFFAIL()= is a macro to check a condition that should be false

---++++ Makefile

TBD

Personal tools