编写Makefile.am以调用googletest单元测试

时间:2010-03-17 11:45:37

标签: c++ unit-testing makefile automake googletest

我正在尝试将我的第一个单元测试添加到现有的开源项目中。具体来说,我添加了一个名为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 个答案:

答案 0 :(得分:8)

如果现有项目已经有测试结构,那么您应该添加:

TESTS += audio_manager

到现有的tests / Makefile.am。如果现有项目没有适当的测试结构,你应该为山丘尖叫。

如果在山上奔跑是不可接受的,那么在测试结构到位方面有一些工作,但这并非不可克服。您可能更喜欢将测试作为src的兄弟,但这不是必需的。使用新的Makefile.am而不是从src复制Makefile.am可能更容易,但可能不是。可能,您需要做的就是更改表单中的行:

bin_PROGRAMS = ...

check_PROGRAMS = ...

添加行

TESTS = test-audio-manager

将audio_manager.cc的名称更改为test-audio-manager.cc(这不是必需的,但有助于维护。我将_改为 - 纯粹出于个人喜好)并添加

SUBDIRS = tests/audio

到src / Makefile.am。 (如果已有SUBDIRS指令,则附加到该作业或使用+ =)

答案 1 :(得分:6)

威廉的回答让我得到了我需要去的地方。只是为了社区,这就是我最终做的事情:

  1. 根据William的建议,我将测试移回主目录结构并预先测试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”会触发单元测试!

  4. 所有这些都可以在这里看到:http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3

答案 2 :(得分: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)