2010-03-17 2 views
6

Я пытаюсь добавить свой первый модульный тест к существующему проекту с открытым исходным кодом. В частности, я добавил новый класс, названный audio_manager:Написание Makefile.am для вызова модульных тестов googletest

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

Я создал структуру каталогов SRC/тест, который отражает структуру файлов реализации, и написал мои googletest модульных тестов:

src/test/audio/audio_manager.cc 

сейчас Я пытаюсь настроить мой Makefile.am, чтобы скомпилировать и запустить тест блока:

src/test/audio/Makefile.am 

Я скопировал Makefile.am из:

src/audio/Makefile.am 

У кого-нибудь есть простой рецепт для меня, или это для загадочной документации для автомагнитофона для меня? :)

ответ

6

Ответ Уильяма дал мне, где мне нужно было идти. Просто ради сообщества, вот что я делал:

  1. Я перенес свои тесты обратно в основную структуру каталогов и предварительный тест_, согласно предложениям Уильяма.
  2. Я добавил несколько строк в Src/аудио/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. Теперь работает «сделать чек» пожары юнит-тесты!

Все это можно увидеть здесь: http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3

8

Если существующий проект уже имеет тестовую структуру на месте, то вы должны просто добавить:

 
TESTS += audio_manager 

к существующим тестам/Makefile.am. Если в существующем проекте нет тестовой структуры, вы должны запустить крик для холмов.

Если работа для холмов неприемлема, есть хорошая работа по созданию тестовой структуры на месте, но она не является непреодолимой. Возможно, вы захотите сделать тесты братом src, но это необязательно. Вероятно, проще начать с нового Makefile.am, а не копировать Makefile.am из src, но, возможно, нет. Возможно, все, что вам нужно сделать, это изменить строки вида:

 
bin_PROGRAMS = ... 

к

 
check_PROGRAMS = ... 

Добавьте строку

 
TESTS = test-audio-manager 

изменить имя audio_manager.cc, чтобы проверить -audio-manager.cc (это не является строго необходимым, но поможет ремонтопригодность. Я изменил _ на - чисто из личных предпочтений) и добавьте

 
SUBDIRS = tests/audio 

to src/Makefile.am. (Если есть уже директива SUBDIRS, добавьте к этому назначению или используйте + =)

1

Дополняющих информацию в других ответах, вы можете также указать несколько тестов для TESTS.

Независимо от того, сколько тестов вы определяете, вы на самом деле не нужно указывать их в два раза, а не просто установить TESTS в $(check_PROGRAMS) - это может помочь предотвратить случайное положение, добавив тест на check_PROGRAMS, но забывая, чтобы добавить его TESTS, в результате чего ваш новый тест будет добавлен в сборку, но никогда не руководят make check:

# Unit tests 
check_PROGRAMS = test_audio_manager 

test_audio_manager_SOURCES = test_audio_manager.cc 

TESTS = $(check_PROGRAMS) 

... или сделать то же самое с несколькими тестов:

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