我正在尝试为一些遗留软件创建一些集成测试。当前进行测试的方法是使用已知输入运行代码并手动将输出与已知输出进行比较。
我想自动化这个过程,因为我已经在使用 CMake 我想用 CTest 来做这个。我有大约两打输入/输出需要检查。
这样做的正确方法是什么?我在 CMake 方面的经验不多,在 CTest 方面的经验更少。
我正在尝试为一些遗留软件创建一些集成测试。当前进行测试的方法是使用已知输入运行代码并手动将输出与已知输出进行比较。
我想自动化这个过程,因为我已经在使用 CMake 我想用 CTest 来做这个。我有大约两打输入/输出需要检查。
这样做的正确方法是什么?我在 CMake 方面的经验不多,在 CTest 方面的经验更少。
您可以使用PASS_REGULAR_EXPRESSION
测试的属性来实现这一点。
假设您的代码接受单个 int 的输入并输出短语“结果是”并附加 10*input。因此,例如在 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()