我正在尝试为某些传统软件创建一些集成测试。目前进行测试的方法是使用已知输入运行代码,手动将输出与已知输出进行比较。
我想自动完成这个过程,因为我已经在使用CMake了,我想用CTest做这个。我需要检查大约二十几个输入/输出。
这样做的正确方法是什么?我只有适度的CMake经验,而CTest的经验则更少。
答案 0 :(得分:4)
您可以使用测试的PASS_REGULAR_EXPRESSION
属性来实现此目的。
假设你有一个代码,它接受一个int的输入,并输出短语“结果是”,附加10 *输入。所以例如在C ++中类似于:
#include <iostream>
#include <cstdlib>
int main(int argc, const char* argv[]) {
if (argc != 2)
return -1;
std::cout << "The result is " << 10 * std::atoi(argv[1]) << '\n';
return 0;
}
然后你可以通过以下方式使用CTest测试:
cmake_minimum_required(VERSION 3.0)
project(Example)
add_executable(example main.cpp)
include(CTest)
set(Inputs 1 2 3)
foreach(Input ${Inputs})
add_test(NAME Test${Input} COMMAND example ${Input})
set_tests_properties(Test${Input} PROPERTIES
PASS_REGULAR_EXPRESSION "The result is ${Input}0")
endforeach()