libmbb features a simple unit test framework inspired by MinUnit.
A test suite is a single C file containing any number of test cases. It must
#include "mbb/test.h"
A test case looks like this:
#include "mbb/queue.h"
#include "mbb/debug.h"
char *test_enqueue_dequeue()
{
int i;
MQUE_DEFINE_STRUCT(int, 5) queue;
MQUE_INITIALISE(&queue);
MUNT_ASSERT(MQUE_IS_EMPTY(&queue));
for (i = 1; i <= 5; i++) {
MUNT_ASSERT(!MQUE_IS_FULL(&queue));
MQUE_ENQUEUE(&queue, i);
}
MUNT_ASSERT(MQUE_IS_FULL(&queue));
for (i = 1; i <= 5; i++) {
int head;
MUNT_ASSERT(!MQUE_IS_EMPTY(&queue));
head = MQUE_HEAD(&queue);
MUNT_ASSERT(head == i);
MQUE_DEQUEUE(&queue);
}
MUNT_ASSERT(MQUE_IS_EMPTY(&queue));
return 0;
}
The test case function must return a string and its name must begin with
test_
. It must return 0 if no error occured. The MUNT_ASSERT(EXPRESSION)
macro is used for the actual test assertions. It makes the test case function
return a string if EXPRESSION
is false.
Have a look at libmbb's own tests as an example.
The munt_main
tool is used to generate a main function for a test suite,
printing it to stdout
. Calling
munt_main test_suite.c > test_suite_main.c
pipes the automatically generated main function to test_suite_main.c
.
This source code can be compiled to an executable which exits returning
EXIT_SUCCESS
or EXIT_FAILURE
depending on whether the test suite failed.
The output of the automatically generated test program looks like this:
tests/test_queue
Test suite 'test_queue':
### test_enqueue_dequeue ###
Assertion passed (013): MQUE_IS_EMPTY(&queue)
Assertion passed (016): !MQUE_IS_FULL(&queue)
Assertion passed (016): !MQUE_IS_FULL(&queue)
Assertion passed (016): !MQUE_IS_FULL(&queue)
Assertion passed (016): !MQUE_IS_FULL(&queue)
Assertion passed (016): !MQUE_IS_FULL(&queue)
Assertion passed (020): MQUE_IS_FULL(&queue)
Assertion passed (025): !MQUE_IS_EMPTY(&queue)
Assertion passed (028): head == i
Assertion passed (025): !MQUE_IS_EMPTY(&queue)
Assertion passed (028): head == i
Assertion passed (025): !MQUE_IS_EMPTY(&queue)
Assertion passed (028): head == i
Assertion passed (025): !MQUE_IS_EMPTY(&queue)
Assertion passed (028): head == i
Assertion passed (025): !MQUE_IS_EMPTY(&queue)
Assertion passed (028): head == i
Assertion passed (033): MQUE_IS_EMPTY(&queue)
### passed ###
Test suite 'test_queue' passed (1 test run)
This website was rendered automatically from libmbb's Markdown documentation.