C89 · C90 · C99 · C11 · C17 · C23 — hosted & freestanding
Your test functions are already named.
AceUnit just reads them.
No annotations, no registration macros. AceUnit inspects the compiled symbol table and runs whatever it finds named test*, beforeEach,afterAll, and friends.
$ aceunit leapyear_test.o >testcases.c # reads the symbol table, writes fixtures — no registration step $ cc testcases.c leapyear_test.o -laceunit-abort $ ./a.out AceUnit: 2 test cases, 2 successful, 0 failed.
Characteristics
| Sym | Parameter | Description |
|---|---|---|
| DISC | Test discovery | Symbol table read via nm, objdump, or readelf. No annotations, no registration macros. |
| STD | Language standards | C89/C90 through C23 — same framework, same discovery mechanism. |
| RUN | Runners | Simple, SetJmp, Abort, Fork — pick the failure model your environment supports. |
| ENV | Environments | Hosted and freestanding — from a workstation down to an 8-bit microcontroller. |
| MOCK | Mocking strategies | Five approaches for untestable code: objcopy, ld --wrap, macros, interposer, stdout capture. |
| TC | Toolchains | GCC, Clang, plus commercial embedded compilers — Keil, Samsung ucc, Open64. |
Quick start
git clone https://github.com/christianhujer/aceunit.git
cd aceunit
make && sudo make installFull prerequisites and platform notes: Installation.
AceUnit also works as a vehicle to study or teach Test-Driven Development in C — small enough to read end to end, real enough to run in production.