いくつかのレガシー ソフトウェア用の統合テストを作成しようとしています。テストを行う現在の方法は、既知の入力でコードを実行し、出力を既知の出力と手動で比較することです。
私はすでに CMake を使用しているので、このプロセスを自動化したいのですが、CTest でこれを行いたいと考えています。チェックする必要がある入力/出力が約 20 あります。
これを行う正しい方法は何ですか?CMake の経験は中程度で、CTest の経験はさらに少ないです。
いくつかのレガシー ソフトウェア用の統合テストを作成しようとしています。テストを行う現在の方法は、既知の入力でコードを実行し、出力を既知の出力と手動で比較することです。
私はすでに CMake を使用しているので、このプロセスを自動化したいのですが、CTest でこれを行いたいと考えています。チェックする必要がある入力/出力が約 20 あります。
これを行う正しい方法は何ですか?CMake の経験は中程度で、CTest の経験はさらに少ないです。
PASS_REGULAR_EXPRESSION
テストのプロパティを使用してこれを実現できます。
単一の int の入力を受け取り、10*input が追加された "The result is " というフレーズを出力するコードがあるとします。たとえば、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()