一、初識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
1. 在外面的CMakeLists.txt中我們這樣寫
cmake_minimum_required(VERSION 2.8) project(test) .... add_subdirectory(test) enable_testing() add_test(NAME mytest COMMAND Test)
2. 在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/test/unit_test.hpp> 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)
