C++ 编写Makefile.am调用googletest单元测试
我正在尝试将我的第一个单元测试添加到现有的开源项目中。具体来说,我添加了一个新类,名为audio_manager:C++ 编写Makefile.am调用googletest单元测试,c++,unit-testing,makefile,automake,googletest,C++,Unit Testing,Makefile,Automake,Googletest,我正在尝试将我的第一个单元测试添加到现有的开源项目中。具体来说,我添加了一个新类,名为audio_manager: src/audio/audio_manager.h src/audio/audio_manager.cc 我创建了一个src/test目录结构,它反映了实现文件的结构,并编写了我的单元测试: src/test/audio/audio_manager.cc # Unit tests noinst_PROGRAMS = test_audio_manager test_audio_
src/audio/audio_manager.h
src/audio/audio_manager.cc
我创建了一个src/test目录结构,它反映了实现文件的结构,并编写了我的单元测试:
src/test/audio/audio_manager.cc
# 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
现在,我正在尝试设置Makefile.am以编译和运行单元测试:
src/test/audio/Makefile.am
我从以下位置复制了Makefile.am:
src/audio/Makefile.am
有没有人给我一个简单的食谱,或者是给我一个神秘的汽车制造文档 如果现有项目已经有了测试结构,那么您只需添加: TESTS += audio_manager 测试+=音频管理器 到现有测试/Makefile.am。如果现有项目没有适当的测试结构,您应该为山而尖叫 如果跑山是不可接受的,那么在使测试结构就位方面有相当多的工作要做,但这不是不可克服的。您可能更喜欢将测试作为src的兄弟,但这不是必需的。从一个新的Makefile.am开始可能比从src复制Makefile.am更容易,但可能不是。您可能只需要更改表单的行: bin_PROGRAMS = ... bin_程序=。。。 到 检查程序=。。。 添加行 TESTS = test-audio-manager 测试=测试音频管理器 将audio_umanager.cc的名称更改为test-audio-manager.cc(这不是绝对必要的,但有助于维护。我更改为-纯粹出于个人喜好),并添加一个 SUBDIRS = tests/audio 细分=测试/音频
到src/Makefile.am。(如果已经有了SUBDIRS指令,请附加到该赋值或使用+=)威廉的回答让我明白了我需要做的事情。为了社区的利益,我最终做了以下几件事:
src/test/audio/audio_manager.cc
# 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
所有这些都可以在这里看到:为了补充其他答案中的信息,您还可以将多个测试指定为
测试
无论您指定了多少个测试,实际上您不必两次指定它们,只需将测试设置为$(check\u PROGRAMS)
-这有助于防止意外情况,即将测试添加到check\u PROGRAMS
,但忘记将其添加到测试中,使您的新测试添加到生成中,但从未由进行检查运行:
# 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)
感谢你让每个人都从这里开始:)