Return to README CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / unit |
1.1 ! misho 1: Unit tests ! 2: ========== ! 3: ! 4: The goal is to add tests for *ALL* functions in libcurl. If functions are too ! 5: big and complicated, we should split them into smaller and testable ones. ! 6: ! 7: Build Unit Tests ! 8: ================ ! 9: ! 10: './configure --enable-debug' is required for the unit tests to build. To ! 11: enable unit tests, there will be a separate static libcurl built that will be ! 12: used exclusively for linking unit test programs. Just build everything as ! 13: normal, and then you can run the unit test cases as well. ! 14: ! 15: Run Unit Tests ! 16: ============== ! 17: ! 18: Unit tests are run as part of the regular test suite. If you have built ! 19: everything to run unit tests, to can do 'make test' at the root level. Or you ! 20: can 'cd tests' and 'make' and then invoke individual unit tests with ! 21: ./runtests.pl NNNN where NNNN is the specific test number. ! 22: ! 23: Debug Unit Tests ! 24: ================ ! 25: ! 26: If a specific test fails you will get told. The test case then has output left ! 27: in the log/ subdirectory, but most importantly you can re-run the test again ! 28: using gdb by doing ./runtests.pl -g NNNN. That is, add a -g to make it start ! 29: up gdb and run the same case using that. ! 30: ! 31: Write Unit Tests ! 32: ================ ! 33: ! 34: We put tests that focus on an area or a specific function into a single C ! 35: source file. The source file should be named 'unitNNNN.c' where NNNN is a ! 36: number that starts with 1300 and you can pick the next free number. ! 37: ! 38: Add your test to tests/unit/Makefile.inc (if it is a unit test). ! 39: Add your test data to tests/data/Makefile.inc ! 40: ! 41: You also need a separate file called tests/data/testNNNN (using the same ! 42: number) that describes your test case. See the test1300 file for inspiration ! 43: and the tests/FILEFORMAT documentation. ! 44: ! 45: For the actual C file, here's a very simple example: ! 46: ! 47: ----------------------- start ------------------------------- ! 48: #include "curlcheck.h" ! 49: ! 50: #include "a libcurl header.h" /* from the lib dir */ ! 51: ! 52: static CURLcode unit_setup( void ) ! 53: { ! 54: /* whatever you want done first */ ! 55: return CURLE_OK; ! 56: } ! 57: ! 58: static void unit_stop( void ) ! 59: { ! 60: /* done before shutting down and exiting */ ! 61: } ! 62: ! 63: UNITTEST_START ! 64: ! 65: /* here you start doing things and checking that the results are good */ ! 66: ! 67: fail_unless( size == 0 , "initial size should be zero" ); ! 68: fail_if( head == NULL , "head should not be initiated to NULL" ); ! 69: ! 70: /* you end the test code like this: */ ! 71: ! 72: UNITTEST_STOP ! 73: ! 74: ----------------------- end -------------------------------