Как использовать 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()