私はC++の単体テストフレームワークの推奨事項に関してすでにいくつか質問があることを知っていますが、それらのうちの1つを推奨するだけで、(機能)比較に関する情報を提供しないため、すべての答えは役に立ちませんでした。
最も興味深いフレームワークはCppUnit、Boost、そして新しいGoogleテストフレームワークだと思います。誰かがまだ比較をしたことがありますか?
この質問を参照 議論のために。
彼らは記事を推薦します: C++単体テストフレームワークのジャングルを探る 、Noel Llopis著。そしてより最近のもの: C++テストユニットフレームワーク
Googletestと他のフレームワークを比較する記事はまだ見つかりません。
新しいプレーヤーは Google Test (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;
SCOPED_TRACE
私は自分自身のフレームワーク、 CATCH をプッシュしました。まだ開発中ですが、他のほとんどのフレームワークをすでに上回っていると思います。さまざまな人々がさまざまな基準を持っていますが、私はあまり多くのトレードオフなしでほとんどの分野をカバーしようとしました。私のリンクされているブログのエントリーを見てテイスターを見てください。私のトップ5の機能は以下のとおりです。
Objective-Cバインディングもあります。プロジェクトは Github にホストされています。
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%
}
それはサポートしています:
シモンズ:私はあなたが始めるのを助けるかもしれないそれについての記事を書きました: C++単体テストフレームワーク:ブーストテストチュートリアル
ウィキペディアには包括的な 単体テストフレームワークのリスト があり、サポートされているかどうかを特定する表があります。
私は最近 xUnit ++ をリリースしました。具体的にはGoogle TestとBoost Test Libraryの代替としてです( 比較 をご覧ください)。 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));
}
主な特徴:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
CppUTest - モックライブラリを使ったとても素敵で軽量なフレームワーク。もう少し詳しく見てみる価値があります。
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.
}
}
これらは自動登録されるので、これ以上必要はありません。それはただコンパイルして実行するだけです。私はこのフレームワークを、JUnitを使用するのと非常によく似ていると思います。Javaをプログラミングするのに時間を費やす必要があった人たちにとっては。非常に素晴らしい!
いくつかの関連するC++単体テストのリソースがあります http://www.progweap.com/resources.html
API健全性チェッカー - C/C++ライブラリ用のテストフレームワーク:
共有C/C++ライブラリ用の基本単体テストの自動ジェネレータ。パラメータの妥当な(ほとんどの、残念ながら全部ではないが)入力データを生成し、ヘッダ内の宣言を分析することによって、API内のすべての関数に対して単純な(「健全性」または「浅い」品質)テストケースを作成できます。ファイル.
生成されたテストの品質により、簡単な使用例で重大なエラーがないことを確認できます。このツールは、生成されたテストを構築して実行し、クラッシュ(セグメンテーション違反)、中止、あらゆる種類の発行されたシグナル、ゼロ以外のプログラム戻りコード、およびプログラムのハングを検出することができます。
CppUnit、Boost、Google Testと比較した際のユニークな機能: