Scrivi Makefile.am per invocare googletest unit test
-
20-09-2019 - |
Domanda
Sto cercando di aggiungere il mio primo test di unità ad un progetto Open Source esistente. In particolare, ho aggiunto una nuova classe, denominata audio_manager:
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 il mio googletest unit test :
src/test/audio/audio_manager.cc
Ora, io sto cercando di impostare il mio Makefile.am per compilare ed eseguire il test di unità:
src/test/audio/Makefile.am
Ho copiato Makefile.am da:
src/audio/Makefile.am
Qualcuno ha una ricetta semplice per me, o è alla documentazione automake criptico per me? :)
Soluzione 2
La risposta di William mi ha dove dovevo andare. Solo per il bene della comunità, ecco quello che ho finito per fare:
- ho spostato le mie prove indietro nella struttura di directory principale e anteposto test_, secondo i suggerimenti di William.
-
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
-
Ora, in esecuzione "make check" spara i test di unità!
Tutto questo può essere visto qui: http://github.com/ksterker/adonthell/ commit / aacdb0fe22f59e61ef0f5986827af180c56ae9f3
Altri suggerimenti
Se il progetto esistente ha già una struttura di prova sul posto, allora si dovrebbe solo aggiungere:
TESTS += audio_manager
per i test esistenti / Makefile.am. Se il progetto esistente non dispone di una struttura di prova sul posto, si dovrebbe correre urlando per le colline.
Se in esecuzione per le colline non è accettabile, c'è un bel po 'di lavoro per ottenere la struttura di prova a posto, ma non è insormontabile. Si potrebbe preferire di fare test un fratello di src, ma non è necessario. E 'probabilmente più facile iniziare con un Makefile.am fresca 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
cambiare il nome di audio_manager.cc a test-audio-manager.cc (. Che non è strettamente necessario, ma aiuterà manutenibilità ho cambiato _ a - puramente di preferenze personali) e aggiungere un
SUBDIRS = tests/audio
src / Makefile.am. (Se c'è già una direttiva SUBDIRS, aggiungere a tale assegnazione o utilizzare + =)
A completamento delle 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 è sufficiente impostare TESTS
a $(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 gestito 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)