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:

      #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;
      }
    
    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.

  • 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