C++ 単体テスト フレームワークの推奨事項に関して既にいくつかの質問があることは知っていますが、フレームワークの 1 つを推奨するだけで、(機能) 比較に関する情報を提供していないため、すべての回答は役に立ちませんでした。
最も興味深いフレームワークは、CppUnit、Boost、および新しい Google テスト フレームワークだと思います。誰もまだ比較をしたことがありますか?
C++ 単体テスト フレームワークの推奨事項に関して既にいくつかの質問があることは知っていますが、フレームワークの 1 つを推奨するだけで、(機能) 比較に関する情報を提供していないため、すべての回答は役に立ちませんでした。
最も興味深いフレームワークは、CppUnit、Boost、および新しい Google テスト フレームワークだと思います。誰もまだ比較をしたことがありますか?
新しいプレーヤーは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;
SCOPED_TRACE
サブルーチンループ用独自のフレームワークCATCHを公開しました。まだ開発中ですが、すでに他のほとんどのフレームワークを凌駕していると思います。人によって基準は異なりますが、私はトレードオフをあまり考慮せずにほとんどの分野をカバーしようとしました。リンク先のブログ エントリを参照して、味見をしてください。私の上位 5 つの機能は次のとおりです。
また、Objective-C バインディングも備えています。プロジェクトはGithubでホストされています
議論については、この質問を参照してください。
彼らは次の記事を推奨しています: Exploring the C++ Unit Testing Framework Jungle、Noel Llopis 著。そしてより最近: C++ テスト ユニット フレームワーク
googletest を他のフレームワークと比較した記事はまだ見つかりません。
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%
}
以下をサポートします。
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";
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.
}
}
自動登録されるので、これ以上は必要ありません。次に、コンパイルして実行するだけです。このフレームワークを使用することは、Javaのプログラミングに時間を費やさなければならなかった人にとって、JUnitを使用するのと非常によく似ています。非常に素晴らしい!
関連する C++ 単体テスト リソースが http://www.progweap.com/resources.htmlにあります。
API サニティ チェッカー— C/C++ ライブラリのテスト フレームワーク:
共有 C/C++ ライブラリの基本単体テストの自動ジェネレーター。ヘッダー内の宣言を分析することで、妥当な (残念ながらすべてのケースではありませんが、ほとんどのケースで) パラメータの入力データを生成し、API のすべての関数に対して単純な (「健全性」または「浅い」品質の) テスト ケースを作成できます。ファイル。
生成されたテストの品質により、単純なユースケースで重大なエラーがないことを確認できます。このツールは、生成されたテストをビルドして実行し、クラッシュ (セグメンテーション違反)、アボート、あらゆる種類の発行されたシグナル、ゼロ以外のプログラム リターン コード、およびプログラムのハングを検出できます。
CppUnit、Boost、Google Test と比較した独自の機能: