C ++単体テストフレームワークの推奨事項に関するいくつかの質問が既にあることを知っていますが、フレームワークの1つを推奨するだけで(機能)比較に関する情報を提供しないため、すべての回答が役に立たなかった。
最も興味深いフレームワークは、CppUnit、Boost、および新しいGoogleテストフレームワークだと思います。誰かがまだ比較を行っていますか?
C ++単体テストフレームワークの推奨事項に関するいくつかの質問が既にあることを知っていますが、フレームワークの1つを推奨するだけで(機能)比較に関する情報を提供しないため、すべての回答が役に立たなかった。
最も興味深いフレームワークは、CppUnit、Boost、および新しいGoogleテストフレームワークだと思います。誰かがまだ比較を行っていますか?
回答:
彼らは次の記事を推奨しています: Noel Llopis著、C ++ユニットテストフレームワークジャングルの探索。そして、より新しい: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でホストされています
CHECK_FLASE
をご検討くださいREQUIRE_FLASE
。
特にすでにBoostを使用している場合は、 Boost Test Libraryが非常に良い選択です。
// 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%
}
それはサポートします:
PS:私はそれを始めるのに役立つかもしれないそれについての記事を書きました:C ++ユニットテストフレームワーク:ブーストテストチュートリアル
ウィキペディアには、単体テストフレームワークの包括的なリストと、サポートされている機能とサポートされていない機能を示す表があります。
私は最近、特に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));
}
主な特徴:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
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の使用と非常によく似ています。非常に素晴らしい!
http://www.progweap.com/resources.htmlには、いくつかの関連するC ++ユニットテストリソースがあり ます。
API Sanity Checker — C / C ++ライブラリのテストフレームワーク:
共有C / C ++ライブラリの基本的な単体テストの自動生成プログラム。ヘッダーの宣言を分析することで、パラメーターの妥当な(ほとんどの場合、残念ながらすべてではない)入力データを生成し、APIのすべての関数の単純な(「健全性」または「浅い」品質)テストケースを構成できます。ファイル。
生成されたテストの品質により、簡単な使用例で重大なエラーがないことを確認できます。このツールは、生成されたテストをビルドして実行し、クラッシュ(segfaults)、アボート、発生したすべての種類の信号、ゼロ以外のプログラムの戻りコード、プログラムのハングを検出できます。
CppUnit、Boost、Google Testと比較したユニークな機能: