我将使用CMake的独立脚本模式来运行测试并比较输出。通常对于单元测试程序,您可以编写
add_test(testname testexecutable)
,但您可以运行任何命令作为测试。
如果您编写一个脚本“runtest.cmake”并通过它执行单元测试程序,那么runtest.cmake脚本可以做任何它喜欢的事情,包括使用
cmake -E compare_files
实用程序。在CMakeLists.txt文件中需要以下内容:
enable_testing()
add_executable(testprog main.c)
add_test(NAME runtestprog
COMMAND ${CMAKE_COMMAND}
-DTEST_PROG=$<TARGET_FILE:testprog>
-DSOURCEDIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/runtest.cmake)
runtest.cmake
可能是:
execute_process(COMMAND ${TEST_PROG}
RESULT_VARIABLE HAD_ERROR)
if(HAD_ERROR)
message(FATAL_ERROR "Test failed")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files
output.txt ${SOURCEDIR}/expected.txt
RESULT_VARIABLE DIFFERENT)
if(DIFFERENT)
message(FATAL_ERROR "Test failed - files differ")
endif()
第一个
execute_process
执行\u进程
有效运行
cmake -E compare_files output.txt expected.txt
但这不能打印出差异;CMake中没有隐藏完整的“diff”实现。目前,您使用Subversion查看哪些行已更改,因此一个明显的解决方案是将最后一部分更改为:
if(DIFFERENT)
configure_file(output.txt ${SOURCEDIR}/expected.txt COPYONLY)
execute_process(COMMAND svn diff ${SOURCEDIR}/expected.txt)
message(FATAL_ERROR "Test failed - files differ")
endif()