一、初识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)