Как использовать CTest, чтобы проверить разницу между двумя файлами?

Я пытаюсь создать несколько интегрированных тестов для некоторых устаревших программ. Текущий способ выполнить тестирование - запустить код с известными входными данными и вручную сравнить выходные данные с известными выходными данными.

Я хотел бы автоматизировать этот процесс, так как я уже использую CMake, я хотел бы сделать это с CTest. У меня есть около двух десятков входов / выходов, которые мне нужно проверить.

Как правильно это сделать? У меня только небольшой опыт работы с CMake и еще меньше с CTest.

1 ответ

Вы можете использовать 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()
Другие вопросы по тегам