如何添加多个将输出与已知良好输出文件进行比较的CTest



我有一个CMake项目,我正试图使用CTest向该项目添加测试。我有十几个左右带有.txt后缀的输入文件,我的程序将其转换为末尾附加了.out的同名文件。我在test子目录中有输入文件(alpha.txtbeta.txt等(和输出文件(alpha.txt.outbeta.txt.out等(。我正在尝试以跨平台的方式添加测试。不幸的是,我的程序fargulate在与输入文件相同的目录中创建输出文件,为了保持向后兼容性,我无法更改这一点。为了避免污染源树,我在运行测试之前将输入文件复制到当前的二进制目录中。所以想要的效果是:

  1. 复制输入的.txt文件
  2. 对复制的文件运行fargulate
  3. 将实际输出与期望输出进行比较

为了可移植性,我曾尝试使用cmake -E语法编写一个测试来实现这一点,但它似乎不起作用。即使文件不同,测试也总是声称已经通过。

我的努力,如图所示,不仅丑陋,而且根本不起作用。有更好、更优雅的方法吗?

到目前为止,我拥有的是:

test/CMakeLists.txt

add_test(NAME Runs COMMAND fargulate)
function(do_test arg)
add_test(NAME ${arg} 
COMMAND "${CMAKE_COMMAND}" -D TESTDIR=${CMAKE_CURRENT_LIST_DIR} -P "${CMAKE_CURRENT_LIST_DIR}/testone.cmake" ../src/fargulate "${arg}.txt"
)
endfunction(do_test)
do_test(alpha)
do_test(beta)
do_test(gamma)
do_test(delta)

test/testone.cmake

execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${TESTDIR}/${CMAKE_ARGV6}" "${CMAKE_ARGV6}")
execute_process(COMMAND "${CMAKE_ARGV5}" -o "${CMAKE_ARGV6}")
execute_process(COMMAND "${CMAKE_COMMAND}" -E compare_files "${TESTDIR}/${CMAKE_ARGV6}.out" "${CMAKE_ARGV6}.out")

CMakeLists.txt(顶级(

cmake_minimum_required(VERSION 3.1)
project(fargulate)
set(CMAKE_CXX_STANDARD 11)
add_subdirectory(src)
enable_testing()
add_subdirectory(test)

src目录就是它看起来的样子;结果是CCD_ 13程序被建立在CCD_。

所需的修改是使用FAIL_REGULAR_EXPRESSION查找故障条件。在这种情况下,只需修改do_test函数以包含以下三行即可:

set_tests_properties(${arg} PROPERTIES
FAIL_REGULAR_EXPRESSION "are different"
)

相关内容

  • 没有找到相关文章

最新更新