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)
有没有人对我有一个简单的配方,还是对我来说是神秘的汽车文档?:)
如果现有项目已经有一个测试结构,那么你应该添加:
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指令,则附加到该作业或使用+ =)
威廉的回答让我得到了我需要去的地方.只是为了社区,这就是我最终做的事情:
我在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)现在,运行"make check"会激活单元测试!
所有这一切都可以在这里看到:http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3