2010-03-17 4 views
6

J'essaie d'ajouter mon premier test unitaire à un projet Open Source existant. Plus précisément, j'ai ajouté une nouvelle classe, appelée audio_manager:Écrire un Makefile.am pour appeler des tests unitaires googletest

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

J'ai créé une structure de répertoire src/test qui reflète la structure des fichiers de mise en œuvre, et écrit mes googletest tests unitaires:

src/test/audio/audio_manager.cc 

maintenant , je suis en train de mettre en place mon Makefile.am pour compiler et exécuter le test unitaire:

src/test/audio/Makefile.am 

Je copiais Makefile.am de:

src/audio/Makefile.am 

Est-ce que quelqu'un a une recette simple pour moi, ou est-ce à la documentation cryptic automake pour moi? :)

Répondre

6

La réponse de William m'a amené là où je devais aller. Juste pour le bien de la communauté, voici ce que j'ai fini par faire:

  1. J'ai replacé mes tests dans la structure de répertoire principale et ajouté test_, selon les suggestions de William.
  2. J'ai ajouté quelques lignes pour permettre des tests unitaires src/audio/Makefile.am:

    # 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. Maintenant, en cours d'exécution "make check" feux les tests unitaires!

Tout cela peut être vu ici: http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3

8

Si le projet existant a déjà une structure de test en place, alors vous devriez simplement ajouter:

 
TESTS += audio_manager 

aux tests existants/Makefile.am. Si le projet existant n'a pas de structure de test en place, vous devriez courir en criant pour les collines.

Si courir pour les collines n'est pas acceptable, il y a beaucoup de travail pour mettre la structure de test en place, mais ce n'est pas insurmontable. Vous pourriez préférer faire des tests avec un frère ou une sœur de src, mais ce n'est pas nécessaire. Il est probablement plus facile de commencer avec un nouveau fichier Makefile.am plutôt que de copier le fichier Makefile.am à partir de src, mais peut-être pas. Peut-être, tout ce que vous aurez besoin de faire est de lignes de changement de la forme:

 
bin_PROGRAMS = ... 

à

 
check_PROGRAMS = ... 

ajouter la ligne

 
TESTS = test-audio-manager 

changer le nom de audio_manager.cc pour tester -audio-manager.cc (ce n'est pas strictement nécessaire, mais cela facilitera la maintenance.) J'ai changé _ à - par pure préférence personnelle) et j'ajoute un

 
SUBDIRS = tests/audio 

à src/Makefile.am. (S'il existe déjà une directive SUBDIRS, ajouter à cette affectation ou utiliser + =)

1

Complétant les informations contenues dans les autres réponses, vous pouvez également spécifier plusieurs tests à TESTS.

Quel que soit le nombre de tests que vous spécifiez, vous n'avez pas vraiment à les spécifier deux fois, au lieu simplement mis TESTS-$(check_PROGRAMS) - cela peut aider à éviter une situation accidentelle d'ajouter votre test à check_PROGRAMS mais en oubliant pour l'ajouter à TESTS, l'origine de votre nouveau test à ajouter à la construction, mais jamais exécuté par make check:

# Unit tests 
check_PROGRAMS = test_audio_manager 

test_audio_manager_SOURCES = test_audio_manager.cc 

TESTS = $(check_PROGRAMS) 

... ou de faire la même chose avec de multiples tests:

# 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)