1

CxxTest Suiteを追加のテスト項目で動的に拡張したいと考えていますが、コンパイル時にすべてのテスト シナリオを利用できる (ハードコードされている) 必要があることがわかりました。

私のシナリオは、テストする 20 以上のメソッドを持つかなりかさばる C++ クラスを持っているということです。このクラスは、40 以上の異なるデータ セットに対してテストする必要があります。これらのデータセットは、パラメーターを介して制御されるクラス コンストラクターを介して取得されます。

私の主な目的は、異なるデータ セットに対して同じ 20 個のテスト ケースを書き直さないようにすることです。データ セットのリストを含む制御ファイルを使用し、同じテスト スイートに対して異なるフィクスチャを作成したいと考えています。

Q1) テスト スイートに動的に (実行時に) テストを追加するにはどうすればよいですか?

Q2) 実行時にフィクスチャを動的に追加できますか? 動的フィクスチャを可能にするより良いテスト スイートはありますか?

Q3) これは TDD 手法が回避するものですか? 誰もが TDD テクニックの優れた要約を手に入れました。

ありがとう、

-- J・ジョーゲンソン --

4

1 に答える 1

1

それを行う直接的な方法は実際にはありません。テストの数は、を実行するときにコンパイル時より前に決定されますcxxtestgen。ファイルを解析し、。で始まるメソッド名を見つけますtest。また、TestSuite子孫を見つけて、それぞれを1回インスタンス化するコードを生成します。各テストスイートに関数記述createSuiteして、スイートのコンストラクターにパラメーターを渡すことができますが、それでも1つのオブジェクトのみを返すように制限されています。

ビルド設定を変更して、テストプログラムを40回呼び出し、毎回コマンドラインで異なるパラメーターを渡すことができます。その計画のしわは、mainCxxTestによって生成されたデフォルトがコマンドラインパラメーターを受け入れないことです。パラメータをチェックし、その後通常のテストランナーを呼び出す独自の実装を提供する必要があります。このようなもの:

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;
}
于 2011-02-03T19:10:09.603 に答える