質問

動的に拡張したいと思います 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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top