A minimal C unit testing framework (only 3 LOC)
I've never liked having to type my test twice, once for the actual test and once for the 'message'. So I do something more like this instead:
I don't actually use the direct printf() approach, but this shows the idea. Is there a reason more people don't 'stringify' macro arguments? I'm pretty tied to GCC, and am not always aware of what works on other compilers.#include <stdio.h> #define test(expr) do { \ if (!(expr)) printf("FAILED: %s\n", #expr); \ else printf(" ok: %s\n", #expr); \ } while (0) int main(void) { int a = 1; test(a == 1); test(a == 0); return 0; }http://en.wikipedia.org/wiki/Assert.h
For those of you working in embedded environments where even that is too heavy: cross-compile or write that stupid macro yourself (it's 3 lines for pity's sake!).
Neat hack, but I far more enjoy glib's g_test_*() infrastructure. It also integrates well with `make' and can print out reports or store them for future comparisons.
Um 3 lines? That's not 3 lines. Sure it FITS into 3 lines but every time you see a ";" you also see a new line. So
#define mu_run_test(test) do { char message = test(); tests_run++; if (message) return message; } while (0)
Isn't one line but
#define mu_run_test(test) do { char *message = test(); tests_run++; if (message) return message; } while (0