使用 CMake 打造 Golang 风格的单元测试框架

版权声明:本文为aggresss原创文章,未经博主允许不得转载。 作者:[email protected] https://blog.csdn.net/aggresss/article/details/87871483

Go语言原生支持单元测试,而且使用起来非常方便。用 CMake 也可以将 C工程的单元测试自动组织起来自动编译单元测试。下面是子目录的 CMake 实现,仅供参考。

# ------------------------------------------------------------------------------
# CMakeLists.txt for aggresss/deps subdirectory
# ------------------------------------------------------------------------------

string(REGEX MATCH "[^/]+$" SUBMODULE ${CMAKE_CURRENT_LIST_DIR})
option(${SUBMODULE} "Build ${SUBMODULE}" OFF)

file(GLOB SRCS_TEST RELATIVE ${CMAKE_CURRENT_LIST_DIR} *_test.c)
if(SRCS_TEST)
  file(GLOB SRCS_COMMON RELATIVE ${CMAKE_CURRENT_LIST_DIR} *.c)
  list(REMOVE_ITEM SRCS_COMMON ${SRCS_TEST})
  if(${SUBMODULE} OR BUILD_ALL)
    foreach(test_file ${SRCS_TEST})
      get_filename_component(test_case ${test_file} NAME_WE)
      # Build
      add_executable(${SUBMODULE}_${test_case} ${SRCS_COMMON} ${test_file})
      target_compile_options(${SUBMODULE}_${test_case} PRIVATE -std=c99)
      # Test
      add_test(NAME ${SUBMODULE}_${test_case} COMMAND ${SUBMODULE}_${test_case})
    endforeach()
  endif()
endif()

具体使用方法可以参考这个链接 https://github.com/aggresss/deps/blob/master/.travis.yml


cmake . -DBUILD_ALL=ON -DCMAKE_BUILD_TYPE:String="Coverage"
make
ctest -T Test -VV
ctest -T MemCheck -VV
cat Testing/Temporary/MemoryChecker.*.log || exit 0
ctest -T Coverage -V

参考文档:

  1. CMake Wiki
  2. https://github.com/aggresss/deps

猜你喜欢

转载自blog.csdn.net/aggresss/article/details/87871483
今日推荐