Написание Makefile.am для запуска модульных тестов googletest - PullRequest
6 голосов
/ 17 марта 2010

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

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

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

src/test/audio/audio_manager.cc

Теперь я пытаюсь настроить Makefile.am для компиляции и запуска модульного теста:

src/test/audio/Makefile.am

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

src/audio/Makefile.am

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

Ответы [ 3 ]

8 голосов
/ 17 марта 2010

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

TESTS += audio_manager

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

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

bin_PROGRAMS = ...

до

check_PROGRAMS = ...

добавить строку

TESTS = test-audio-manager

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

SUBDIRS = tests/audio

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

6 голосов
/ 18 марта 2010

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

  1. Я переместил свои тесты обратно в основную структуру каталогов и добавил test_, согласно советам Уильяма.
  2. Я добавил несколько строк в 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. Теперь запуск «make check» запускает юнит-тесты!

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

1 голос
/ 07 ноября 2015

В дополнение к информации в других ответах, вы также можете указать несколько тестов для 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)
...