Простое интеграционное тестирование с использованием bash с CMake и CTest?

У меня есть проект C++ CMake, где я использую Google Test для модульного тестирования, и я доволен отчетами XML, созданными с использованием ctest -T Test, Теперь я хотел бы реализовать пару интеграционных тестов, которые запускают конкретные сценарии приложения и ожидают определенного вывода, например, запуск исполняемого файла C++ со значениями по умолчанию должен давать конкретный вывод, например, следующее integration_test_01.sh bash shell будет таким тестом:

 #!/bin/bash
 ./my_algorithm > out && grep "mse\=1\.2345e\-6" out 
 if [ $? == 0 ]; then
     echo "integration test succeeded"
 else
     echo "integration test failed" >&2
 fi
 rm out | cat

Есть ли способ интегрировать такой тест с CMake или CTest и, возможно, даже получить какой-нибудь вывод XML?

1 ответ

Решение

С CMake и CTest вы можете добавить тест для my_algorithm следующим образом:

add_executable(my_algorithm ...)
add_test(NAME integration_test_01 COMMAND my_algorithm)
set_tests_properties(integration_test_01 
    PROPERTIES PASS_REGULAR_EXPRESSION "mse\\=1\\.2345e\\-6")

Вывод команды my_algorithm будет проверен по указанному регулярному выражению, и если результат не совпадает, тест не пройден.

Когда вы запускаете тесты с ctest -T Test сгенерированный отчет XML будет содержать фактический вывод команды, вложенной в <Measurement> тег.

Другие вопросы по тегам