CTest 簡介
一、初識CTest
CTest是CMake集成的一個測試工具,在使用CMakeLists.txt文件編譯工程的時候,CTest會自動configure、build、test和展現測試結果
CTest有兩個模式:
-  
模式一: 使用CMake configure 和 build工程,在CMakeLists.txt文件中,使用特殊的命令去創建tests。CTest用來執行那些測試
 -  
模式二: 使用CTest來執行一個script(這個script的語法必須和CMakeLists.txt相同),去控制整個程序的輸出結果
 
二、使用方法
目前我們在工程中這樣構建單元測試
project
 |--------include
 |
 |--------src
 |
 |-----------test
 |       |---CMakeLists.txt
 |
 |--------CMakeLists.txt
 
        - 在外面的CMakeLists.txt中我們這樣寫
 
cmake_minimum_required(VERSION 2.8)
project(test)
....
add_subdirectory(test)
enable_testing()
add_test(NAME mytest COMMAND Test)
 
         
         
        - 在test/CMakeLists.txt中寫你的測試需要的即可(可以如下面那樣寫)
 
三、完整的簡單測試工程
include
  
    //sqr.h
#ifndef SQR_H_
#define SQR_H_
double sqr(double);
#endif
 
          
        src
  
  //sqr.cpp
  #include "sqr.h"
double sqr(double x) {
 return x * x;
 }
//main.cpp
 int main()
 {
 return 0;
 }
 
 
          
        test
  
//test.cpp
#include "sqr.h"
#define BOOST_TEST_MODULE SqrTests
#include 
   
   
   
            
            BOOST_AUTO_TEST_CASE(FailTest)
 {
 BOOST_CHECK_EQUAL(5, sqr(2));
 }
 
            BOOST_AUTO_TEST_CASE(PassTest)
 {
 BOOST_CHECK_EQUAL(4, sqr(2));
 }
 
            //CMakeLists.txt
 find_package(Boost COMPONENTS system filesystem unit_test_framework REQUIRED)
 
            include_directories(include ${Boost_INCLUDE_DIRS}/boost)
 
            add_definitions(-DBOOST_TEST_DYN_LINK -g)
 add_executable(Test test.cpp)
 
            target_link_libraries(Test sqr ${Boost_FILESYSTEM_LIBRARY}
 ${Boost_SYSTEM_LIBRARY}
 ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
 
            message(WARNING ${Boost_FILESYSTEM_LIBRARY})
 message(WARNING ${Boost_SYSTEM_LIBRARY})
 message(WARNING ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
 
 
             
          
        CMakeLists.txt
  
cmake_minimum_required(VERSION 2.8)
project(test)
include_directories(include)
 add_library(sqr STATIC src/sqr.cpp)
add_executable(demo src/main.cpp)
 target_link_libraries(demo sqr)
add_subdirectory(test)
 enable_testing()
 add_test(NAME mytest COMMAND Test)
 
 
          
        參考文檔:
 https://gitlab.kitware.com/cmake/community/-/wikis/doc/ctest/Testing-With-CTest
 https://cmake.org/cmake/help/latest/manual/ctest.1.html
 https://cmake.org/cmake/help/v2.8.12/ctest.html
 https://linux.die.net/man/1/ctest
 https://github.com/Azure/ctest
 https://github.com/bvdberg/ctest
 https://github.com/bvdberg/ctest
 https://docs.nersc.gov/services/cdash/with_cmake/
