326

C++ 単体テスト フレームワークの推奨事項に関して既にいくつかの質問があることは知っていますが、フレームワークの 1 つを推奨するだけで、(機能) 比較に関する情報を提供していないため、すべての回答は役に立ちませんでした。

最も興味深いフレームワークは、CppUnit、Boost、および新しい Google テスト フレームワークだと思います。誰もまだ比較をしたことがありますか?

4

10 に答える 10

131

新しいプレーヤーはGoogleTest ( Google C ++ Testing Frameworkとも呼ばれます)ですが、これは非常に優れています。

#include <gtest/gtest.h>

TEST(MyTestSuitName, MyTestCaseName) {
    int actual = 1;
    EXPECT_GT(actual, 0);
    EXPECT_EQ(1, actual) << "Should be equal to one";
}

主な特徴:

  • ポータブル
  • 致命的および非致命的なアサーション
  • 簡単なアサーションの有益なメッセージASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • Google Testはテストを自動的に検出し、実行するためにテストを列挙する必要はありません。
  • アサーションの語彙を簡単に拡張できるようにします
  • 死亡テスト(高度なガイドを参照)
  • SCOPED_TRACEサブルーチンループ用
  • 実行するテストを決定できます
  • XMLテストレポートの生成
  • 備品/モック/テンプレート..。
于 2010-08-25T12:16:14.097 に答える
126

独自のフレームワークCATCHを公開しました。まだ開発中ですが、すでに他のほとんどのフレームワークを凌駕していると思います。人によって基準は異なりますが、私はトレードオフをあまり考慮せずにほとんどの分野をカバーしようとしました。リンク先のブログ エントリを参照して、味見をしてください。私の上位 5 つの機能は次のとおりです。

  • ヘッダーのみ
  • 関数およびメソッドベースのテストの自動登録
  • 標準の C++ 式を LHS と RHS に分解します (アサート マクロのファミリ全体は必要ありません)。
  • 関数ベースのフィクスチャ内のネストされたセクションのサポート
  • 自然言語を使用した名前テスト - 関数/メソッド名が生成されます

また、Objective-C バインディングも備えています。プロジェクトはGithubでホストされています

于 2010-12-28T03:14:31.410 に答える
108

議論については、この質問を参照してください。

彼らは次の記事を推奨しています: Exploring the C++ Unit Testing Framework Jungle、Noel Llopis 著。そしてより最近: C++ テスト ユニット フレームワーク

googletest を他のフレームワークと比較した記事はまだ見つかりません。

于 2008-10-28T11:19:14.523 に答える
55

Boost Test Libraryは、特に既に Boost を使用している場合に非常に適しています。

// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(MyTestCase)
{
    // To simplify this example test, let's suppose we'll test 'float'.
    // Some test are stupid, but all should pass.
    float x = 9.5f;

    BOOST_CHECK(x != 0.0f);
    BOOST_CHECK_EQUAL((int)x, 9);
    BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}

以下をサポートします。

  • 自動または手動のテスト登録
  • 多くの主張
  • コレクションの自動比較
  • さまざまな出力形式 ( XMLを含む)
  • 備品/テンプレート...

PS: 始めるのに役立つ記事を書きました: C++ ユニット テスト フレームワーク: ブースト テスト チュートリアル

于 2010-08-25T12:24:23.750 に答える
16

私は最近、特に Google Test と Boost Test Library の代替としてxUnit++をリリースしました (比較を参照してください)。xUnit.Net に精通している場合は、xUnit++ の準備ができています。

#include "xUnit++/xUnit++.h"

FACT("Foo and Blah should always return the same value")
{
    Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\".";
    Assert.Equal(Foo(), Blah());
}

THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected),
    std::make_tuple(0, "0"),
    std::make_tuple(1, "1"),
    std::make_tuple(2, "2"))
{
    Assert.Equal(expected, Foo(input));
}

主な特徴:

  • 信じられないほど高速: テストは同時に実行されます。
  • ポータブル
  • 自動試験登録
  • 多くのアサーション タイプ (Boost は xUnit++ には何もありません)
  • コレクションをネイティブに比較します。
  • アサーションには次の3 つのレベル があります。
    • 致命的なエラー
    • 致命的でないエラー
    • 警告
  • 簡単なアサートロギング:Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
  • ロギングのテスト:Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
  • 備品
  • データ駆動型テスト (理論)
  • 以下に基づい て実行するテストを選択します。
    • 属性マッチング
    • 名前の部分文字列の一致
    • テスト スイート
于 2012-10-25T04:58:28.697 に答える
5

CppUTest - モック ライブラリを備えた非常に優れた軽量フレームワーク. 詳しく見てみる価値あり。

于 2011-06-07T18:40:12.703 に答える
4

CPUnit(http://cpunit.sourceforge.net)は、Google Testに似たフレームワークですが、より少ないmacos(アサートは関数)に依存し、通常のマクロの落とし穴を回避するためにマクロのプレフィックスが付けられています。テストは次のようになります。

#include <cpunit>

namespace MyAssetTest {
    using namespace cpunit;

    CPUNIT_FUNC(MyAssetTest, test_stuff) {
        int some_value = 42;
        assert_equals("Wrong value!", 666, some_value);
    }

    // Fixtures go as follows:
    CPUNIT_SET_UP(MyAssetTest) {
        // Setting up suite here...
        // And the same goes for tear-down.
    }

}

自動登録されるので、これ以上は必要ありません。次に、コンパイルして実行するだけです。このフレームワークを使用することは、Javaのプログラミングに時間を費やさなければならなかった人にとって、JUnitを使用するのと非常によく似ています。非常に素晴らしい!

于 2011-07-15T16:47:27.233 に答える
3

関連する C++ 単体テスト リソースが http://www.progweap.com/resources.htmlにあります。

于 2009-11-16T14:56:51.830 に答える
3

API サニティ チェッカー— C/C++ ライブラリのテスト フレームワーク:

共有 C/C++ ライブラリの基本単体テストの自動ジェネレーター。ヘッダー内の宣言を分析することで、妥当な (残念ながらすべてのケースではありませんが、ほとんどのケースで) パラメータの入力データを生成し、API のすべての関数に対して単純な (「健全性」または「浅い」品質の) テスト ケースを作成できます。ファイル。

生成されたテストの品質により、単純なユースケースで重大なエラーがないことを確認できます。このツールは、生成されたテストをビルドして実行し、クラッシュ (セグメンテーション違反)、アボート、あらゆる種類の発行されたシグナル、ゼロ以外のプログラム リターン コード、およびプログラムのハングを検出できます。

CppUnit、Boost、Google Test と比較した独自の機能:

  • テスト データと入力引数の自動生成 (複雑なデータ型でも)
  • フィクスチャやテンプレートの代わりに、モダンで高度に再利用可能な特殊な型
于 2011-01-25T15:28:15.623 に答える