2010-03-17 8 views
6

Sto tentando di aggiungere il mio primo test di unità a un progetto Open Source esistente. In particolare, ho aggiunto una nuova classe, denominata audio_manager:Scrittura di un Makefile.am per invocare i test delle unità di googletest

src/audio/audio_manager.h 
src/audio/audio_manager.cc 

ho creato una struttura di directory src/test che rispecchia la struttura dei file di implementazione, e ho scritto le mie googletest test di unità:

src/test/audio/audio_manager.cc 

Ora , sto cercando di impostare il mio Makefile.am per compilare ed eseguire il test di unità:

src/test/audio/Makefile.am 

ho copiato da Makefile.am:

src/audio/Makefile.am 

Qualcuno ha una ricetta semplice per me, o è per la documentazione di automake criptico per me? :)

risposta

6

La risposta di William mi ha portato dove dovevo andare. Solo per il bene della comunità, ecco cosa ho finito per fare:

  1. Ho spostato nuovamente i miei test nella struttura della directory principale e ho eseguito il test_, come da suggerimenti di William.
  2. ho aggiunto qualche riga di src/audio/Makefile.am per permettere test di unità:

    # Unit tests 
    noinst_PROGRAMS = test_audio_manager 
    
    test_audio_manager_SOURCES = $(libadonthell_audio_la_SOURCES) test_audio_manager.cc 
    test_audio_manager_CXXFLAGS = $(libadonthell_audio_la_CXXFLAGS) 
    test_audio_manager_LDADD = $(libadonthell_audio_la_LIBADD) -lgtest 
    
    TESTS = test_audio_manager 
    
  3. Ora, l'esecuzione di "make check" fuochi i test di unità!

Tutto questo può essere visto qui: http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3

8

Se il progetto esistente ha già una struttura di prova sul posto, allora si dovrebbe solo aggiungere:

 
TESTS += audio_manager 

alle prove esistenti/Makefile.am. Se il progetto esistente non ha una struttura di test in atto, è necessario eseguire urlando per le colline.

Se la corsa per le colline non è accettabile, c'è un bel po 'di lavoro nell'ottenere la struttura di test in atto, ma non è insormontabile. Potresti preferire fare dei test a un fratello di src, ma non è necessario. Probabilmente è più facile iniziare con un nuovo Makefile.am piuttosto che copiare il Makefile.am da src, ma forse no. Forse, tutto quello che dovrete fare è di linee di cambiamento della forma:

 
bin_PROGRAMS = ... 

a

 
check_PROGRAMS = ... 

aggiungere la riga

 
TESTS = test-audio-manager 

cambio il nome di audio_manager.cc per testare -audio-manager.cc (che non è strettamente necessario, ma aiuterà la manutenibilità.Ho cambiato _ per - semplicemente per preferenze personali) e aggiungo uno

 
SUBDIRS = tests/audio 

in src/Makefile.am. (Se c'è già una direttiva SUBDIRS, accodala o usa + =)

1

Complimentando le informazioni nelle altre risposte, è possibile anche specificare più test per TESTS.

Indipendentemente dal numero di test si specifica, in realtà non è necessario specificare due volte, invece basta impostare TESTS-$(check_PROGRAMS) - questo può aiutare a prevenire una situazione accidentale di aggiungere il test per check_PROGRAMS ma dimenticando di aggiungere al TESTS, causando il nuovo test da aggiungere alla costruzione, ma mai di essere gestita da make check:

# Unit tests 
check_PROGRAMS = test_audio_manager 

test_audio_manager_SOURCES = test_audio_manager.cc 

TESTS = $(check_PROGRAMS) 

... o per fare lo stesso con prove multiple:

# Unit tests 
check_PROGRAMS = test_audio_manager test_video_manager 

test_audio_manager_SOURCES = test_audio_manager.cc 
test_video_manager_SOURCES = test_video_manager.cc 

TESTS = $(check_PROGRAMS)