views:

245

answers:

2

I am trying to add my first unit test to an existing Open Source project. Specifically, I added a new class, called audio_manager:

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

I created a src/test directory structure that mirrors the structure of the implementation files, and wrote my googletest unit tests:

src/test/audio/audio_manager.cc

Now, I am trying to set up my Makefile.am to compile and run the unit test:

src/test/audio/Makefile.am

I copied Makefile.am from:

src/audio/Makefile.am

Does anyone have a simple recipe for me, or is it to the cryptic automake documentation for me? :)

+2  A: 

If the existing project already has a test structure in place, then you should just add:

TESTS += audio_manager

to the existing tests/Makefile.am. If the existing project does not have a test structure in place, you should run screaming for the hills.

If running for the hills is not acceptable, there's a fair bit of work in getting the test structure in place, but it's not insurmountable. You might prefer to make tests a sibling of src, but that's not necessary. It's probably easier to start with a fresh Makefile.am rather than copying the Makefile.am from src, but maybe not. Possibly, all you'll need to do is change lines of the form:

bin_PROGRAMS = ...

to

check_PROGRAMS = ...

add the line

TESTS = test-audio-manager

change the name of audio_manager.cc to test-audio-manager.cc (that's not strictly necessary, but will help maintainability. I changed _ to - purely out of personal preference) and add a

SUBDIRS = tests/audio

to src/Makefile.am. (If there's already a SUBDIRS directive, append to that assignment or use +=)

William Pursell
A: 

William's answer got me where I needed to go. Just for the sake of the community, here's what I ended up doing:

  1. I moved my tests back into the main directory structure and prepended test_, as per William's suggestions.
  2. I added a few lines to src/audio/Makefile.am to enable unit tests:

    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. Now, running "make check" fires the unit tests!

All of this can be seen here: http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3

jmglov