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

Jos*_*ver 6 c++ automake unit-testing makefile googletest

我正在尝试将我的第一个单元测试添加到现有的开源项目中.具体来说,我添加了一个名为audio_manager的新类:

src/audio/audio_manager.h
src/audio/audio_manager.cc
Run Code Online (Sandbox Code Playgroud)

我创建了一个src/test目录结构,它反映了实现文件的结构,并编写了我的googletest单元测试:

src/test/audio/audio_manager.cc
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试设置我的Makefile.am来编译并运行单元测试:

src/test/audio/Makefile.am
Run Code Online (Sandbox Code Playgroud)

我从以下位置复制了Makefile.am:

src/audio/Makefile.am
Run Code Online (Sandbox Code Playgroud)

有没有人对我有一个简单的配方,还是对我来说是神秘的汽车文档?:)

Wil*_*ell 9

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

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指令,则附加到该作业或使用+ =)


Jos*_*ver 7

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

  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在,运行"make check"会激活单元测试!

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