6

現在、テストに CppUnit を使用していますが、 Categoriesの概念がサポートされていないことに不満を感じています。この考えをサポートする広く使用されている C++ 単体テスト フレームワークはありますか?

NUnit のドキュメントからの例を次に示します。

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  [Category("LongRunning")]
  public class LongRunningTests
  {
    // ...
  }
}

アイデアは、テストをさまざまなカテゴリにグループ化し、指定されたカテゴリでテストを実行したり、カテゴリに基づいてテストを除外したりできるようにすることです。

CppUnit、Boost.Test、Google Test を試しましたが、この考えを直接サポートしているものはありません。

たとえば、単体テスト統合テスト、中程度のテスト、大規模なテストがあります。単体テスト統合テストはすばやく実行されるため、自動ビルドのすべてのビルド構成 (リリース/デバッグ、x86/x64、linux/windows) で実行します。中程度のテストは実行に時間がかかるため、Release|x64|windowsビルドでのみ実行します。大きいテストは開発支援として存在し、自動ビルドで実行されることはありません。さらに、x86|windows にのみ存在する機能があります (複雑です)。私はこれらすべてを、CppUnit が喜んでサポートする複雑な階層で行います。ただし、「リリース」、「デバッグ」、「x86」などのカテゴリでこれを行う方がはるかに優れています.

CppUnit では、私のテストは現在 Fixture クラスにあります。理想的には、これらのフィクスチャにカテゴリをタグ付けして、それに応じてフィルタリングできるようにしたいと考えています。

テスト階層では行われず、カテゴリでは行われる重要なことの 1 つは、1 つのフィクスチャに複数のカテゴリを持たせることです。

4

2 に答える 2

3

質問を理解できるかどうかはわかりません。私が理解しているかどうかを確認するために、いくつかの擬似コードを書いてみましょう。

class TestCategory : public CPPUNIT_NS::TestCase {

    CPPUNIT_TEST_SUITE_BEGIN(TestCategory);
    CPPUNIT_TEST(myTestFunction);
    CPPUNITT_TEST_SUITE_END();

protected:

    void myTestFunction() {}

}

これらのクラスはn個持つことができます。概して:

// headers omitted

CPPUNT_TEST_SUITE_REGISTRATION(TestCategory)
// more registrations here
CPPUNIT_TEST_SUITE_REGISTRATION(TestCategory_n_)

int main(int argc, char** argv) {

   // test runner steps
}

鈍感であることを許してください、しかしあなたはテストアーキテクチャで論理パーティションを探しています、そうですか?その場合、クラスを介してテストをグループ化し、必要に応じてメイン関数に含めることができます。

私が理解するのを手伝ってください。ありがとう。

于 2013-02-05T03:49:55.583 に答える
2

Boost.Testの--run_testオプションは、テストまたはスイート名のワイルドカード マッチングをサポートしています。マッチングがどれほど柔軟かは完全にはわかりませんが、タグのような名前の部分を test(-suite) 名に入れると、おそらく--run_test=suite_LongRunning*/*そのようなものを実行できます.


また、さまざまなカテゴリを実行するために使用できる属性を持つxUnit++に出くわしました。(NUnit をモデルにしているので、これは不思議ではありません。)

于 2014-02-12T08:12:52.793 に答える