Ho un modo accurato (così ho pensato) di avere ciascuno dei miei moduli in grado di produrre un eseguibile di test unitario se compilato con il flag -DTESTMODULE
. Questo flag protegge una funzione main()
che può accedere a tutti i dati e le funzioni statici nel modulo, senza includere un file C.
dal README :
-- Modules --
The various modules were written and tested separately before being
coupled together to achieve the necessary basic functionality.
Each module retains its unit-test, its main() function, guarded
by #ifdef TESTMODULE. 'make test' will compile and execute all the
unit tests, producing copious output, but importantly exitting with
an appropriate success or failure code, so the 'make test' command will
fail if any of the tests fail.
Module TOC
__________
test obj src header structures CONSTANTS
---- --- --- --- --------------------
m m.o m.c m.h mfile mtab TABSZ
s s.o s.c s.h stack STACKSEGSZ
v v.o v.c v.h saverec_
f.o f.c f.h file
ob ob.o ob.c ob.h object
ar ar.o ar.c ar.h array
st st.o st.c st.h string
di di.o di.c di.h dichead dictionary
nm nm.o nm.c nm.h name
gc gc.o gc.c gc.h garbage collector
itp itp.c itp.h context
osunix.o osunix.c osunix.h unix-dependent functions
È compilato da un po 'di makefile ,
m:m.c ob.h ob.o err.o $(CORE) itp.o $(OP)
cc $(CFLAGS) -DTESTMODULE $(LDLIBS) -o $@ $< err.o ob.o s.o ar.o st.o v.o di.o gc.o nm.o itp.o $(OP) f.o
dove il modulo è compilato con il proprio file C più ogni altro file oggetto tranne se stesso .
Ma sta creando difficoltà al gentile programmatore che si è offerto di scrivere i file Autotools per me. Quindi il modo più ovvio per renderlo "meno strano" sarebbe quello di eliminare tutte le funzioni main
in file sorgente separati. Ma, ma ... Devo?