6

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

有没有人给我一个简单的食谱,或者对我来说是神秘的自动制作文档?:)

4

3 回答 3

9

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

测试 += 音频管理器

到现有的测试/Makefile.am。如果现有项目没有适当的测试结构,您应该尖叫着冲向山丘。

如果无法接受山上的奔跑,则需要进行大量工作才能使测试结构到位,但这并非无法克服。您可能更喜欢将测试作为 src 的兄弟,但这不是必需的。从新的 Makefile.am 开始可能比从 src 复制 Makefile.am 更容易,但也许不是。可能,您需要做的就是更改表格的行:

bin_PROGRAMS = ...

check_PROGRAMS = ...

添加行

TESTS = 测试音频管理器

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

SUBDIRS = 测试/音频

到 src/Makefile.am。(如果已经有一个 SUBDIRS 指令,附加到该分配或使用 +=)

于 2010-03-17T15:38:21.267 回答
7

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

  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

于 2010-03-18T10:40:09.140 回答
2

补充其他答案中的信息,您还可以指定多个测试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)
于 2015-11-07T01:06:06.617 回答