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? :)

È stato utile?

Soluzione 2

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

  1. ho spostato le mie prove indietro nella struttura di directory principale e anteposto test_, secondo i 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, 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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top