如何使用CTest检查两个文件之间的区别?

时间:2015-03-19 20:30:39

标签: testing cmake integration-testing ctest

我正在尝试为某些传统软件创建一些集成测试。目前进行测试的方法是使用已知输入运行代码,手动将输出与已知输出进行比较。

我想自动完成这个过程,因为我已经在使用CMake了,我想用CTest做这个。我需要检查大约二十几个输入/输出。

这样做的正确方法是什么?我只有适度的CMake经验,而CTest的经验则更少。

1 个答案:

答案 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()