单位测试输出&项目结构建议--- CMake + Google Test Framework

时间:2011-08-31 19:30:31

标签: cmake googletest

我是CMake的新手,我正在使用Google测试框架。我已经找到了将CMake和Google测试框架结合起来的更复杂的例子,但我没有找到太多运气。我希望有人可以就我到达的设置提出他们的意见并为我回答一个问题。这是基本的项目结构:

ProjectFolder
-CMakeLists.txt
/建
/包括
- 我的.h文件
/ src目录
-CMakeLists.txt
- 我的.cpp文件
/测试
-CMakeLists.txt
/ GTEST
-Google的CMakeLists.txt
/嘲笑
-CMakeLists.txt
-cpp和h文件用于模拟

简而言之,根cmake文件将src和tests作为子目录添加。 src cmake文件将cpp文件复制到库中。测试cmake文件添加了mocks和gtest作为子目录。模拟cmake文件将其所有cpp文件复制到第二个库中。最后,tests文件夹中的cmake文件将src库,google库和mocks库与单元测试可执行文件链接起来。

我最终得到的是几个可执行文件:objA_unittest,objB_unittest等

一些事情:

  1. 要构建所有这些并仍然保持我的项目目录相当干净我进入构建文件夹并运行“cmake ..”这似乎工作得很好,我正计划配置vim以始终运行make out这个文件夹。有没有人有这方法的任何提示或看到任何问题?

  2. 我不喜欢在我的项目文件夹中嵌入谷歌库的想法(特别是如果我最终有几个项目使用它),但似乎强烈建议您不要预编译谷歌图书馆,我看不到这个。但是,如果有人知道更好的方式,我很乐意听到。

  3. 运行测试。我喜欢我所要做的就是运行“make test”来用ctest执行我的所有单元测试。但是,我发现我不太喜欢输出。每个单元测试可执行文件包含几个不同的单直接运行这些提供了Google非常详细的反馈。如果可执行文件中的某个测试失败,我确切知道测试失败的原因和原因。以前,我使用了makefile,在makefile的末尾我只执行了所有的测试。我首先尝试通过在cmake中创建自定义构建目标来解决此问题。但是,它只执行第一个命令。我要么需要一种方法来从CTest获得更详细的输出,或者我需要一种方法来自动输出bash脚本或类似的来自CMake以执行每个单元测试可执行文件。换句话说,我现在已经设置了cmake文件,所以我只需要在一个地方添加单元测试来生成可执行文件,我不想记得将它添加到第二个位置,如果我能避免的话它。有没有人有这方面的经验?

  4. 非常感谢。

2 个答案:

答案 0 :(得分:12)

这是我的example。我已经把它作为我的开发团队的简短指南。也许你会发现它也很有用。

答案 1 :(得分:11)

  1. 这实际上是一种名为out-of-source build
  2. 的推荐cmake练习
  3. AFAIK建议不要在系统中安装重新编译的googletest库。因此,如果您将其编译为共享或静态库作为项目构建的一部分,那么应该没有任何问题。我在Windows,Linux,OSX和Android上使用了googletest 1.6.0,没有遇到任何问题。
  4. 我不确定CTest,但自定义目标肯定能够为您运行所有测试。以下是我建议的简短解决方案:
  5. 在您的顶级CMakeLists.txt中添加以下行(在添加任何测试之前):

    add_custom_target(test)
    macro(run_test test_target)
      add_custom_target(${test_target}_runtest
          COMMAND ${test_target} #cmake 2.6 required
          DEPENDS ${test_target}
          WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
      add_dependencies(test ${test_target}_runtest)
    endmacro()
    

    接下来为每个测试添加一行,将测试附加到test目标:

    #add_executable(mytest ${mysources})
    run_test(mytest)