cxxtestスイートは、実行時に動的に拡張できますか?
-
04-10-2019 - |
質問
動的に拡張したいと思います cxxtestスイート 追加のテスト項目を使用していますが、コンパイル時にすべてのテストシーンが利用可能(ハードコーディングされている)必要があることがわかります。
私のシナリオは、テストする20以上の方法があるかなりかさばるC ++クラスを持っているということです。このクラスは、40以上の異なるデータセットについてテストする必要があります。これらのデータセットは、パラメーターを介して制御されるクラスコンストラクターを介して取得されます。
私の主な目的は、異なるデータセットについて同じ20のテストケースを書き直さないことです。データセットのリストを含むコントロールファイルを使用し、同じテストスイートの異なるフィクスチャーを作成するだけです。
Q1)(実行時に)動的にどのようにテストスイートにテストを追加しますか?
Q2)実行時に備品を動的に追加できますか?動的な備品を可能にするより良いテストスイートはありますか?
Q3)これはTDDテクニックが避けるものですか?誰もがTDDテクニックの良い要約を得ました。
ありがとう、
-J Jorgenson-
解決
それを行うための直接的な方法は本当にありません。テストの数は、実行時にコンパイルされる前に決定されます cxxtestgen
. 。それはあなたのファイルを解析し、から始まるメソッド名を見つけます test
. 。それも見つかります TestSuite
子孫と生成コードを生成して、それぞれを一度インスタンス化します。あなたはできる 書く createSuite
働き 各テストスイートでは、パラメーターをスイートのコンストラクターに渡すことができますが、1つのオブジェクトのみを返すことに限定されています。
ビルドセットアップを変更して、テストプログラムを40回異なり、毎回コマンドラインに異なるパラメーターを渡すことができます。その計画のしわはそのデフォルトです main
CXXTESTによって生成されたコマンドラインパラメーターは受け入れられません。パラメーターをチェックする独自の実装を提供し、その後通常のテストランナーを呼び出す必要があります。このようなもの:
std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
global_var = argv[1]; // read parameter list
return CxxTest::ErrorPrinter().run(); // standard CxxTest
}
その関数を使用するには、省略します --error-printer
実行するときのオプション cxxtestgen
, 、 追加 <CxxTest world>
ファイルの最後に、使用します --template
テストプログラムを生成するオプション.
しかし、あなたがあなた自身を書いている限り main
, 、データセットファイルをそこに解析してから、テストランナーを複数回呼び出すこともできます。このようなもの:
int main() {
std::fstream dataset("datasetlist.txt");
int result = 0;
while (std::getline(dataset, global_var))
result += CxxTest::ErrorPrinter().run();
return result;
}