私はcppunitに出くわしましたが、それは非常に使いやすいようには見えませんでした(おそらく、C++がJava/ C#のように機能しないため、私はハードに見えませんでした)。広く使用されている単純な代替手段はありますか?
実際、cppunitはC ++の標準的な単体テストフレームワークですか?
私はcppunitに出くわしましたが、それは非常に使いやすいようには見えませんでした(おそらく、C++がJava/ C#のように機能しないため、私はハードに見えませんでした)。広く使用されている単純な代替手段はありますか?
実際、cppunitはC ++の標準的な単体テストフレームワークですか?
C++用の標準の単体テストライブラリはありません。選択できる選択肢はたくさんあります。cppunitはそれらの1つです。
私の会社では、単体テストとオブジェクトモックにパートナーのGoogleMockと一緒にGoogleTestを使用しています。私はそれらの両方がcppunitよりも使いやすくそしてはるかに強力であると感じています。
独自のフレームワークCATCHを公開しました。まだ開発中ですが、すでに他のほとんどのフレームワークを凌駕していると思います。人によって基準は異なりますが、私はトレードオフをあまり考慮せずにほとんどの分野をカバーしようとしました。リンク先のブログ エントリを参照して、味見をしてください。私の上位 5 つの機能は次のとおりです。
また、Objective-C バインディングも備えています。
例として、@dmeister が引用した gtest の例に相当するものを記述する方法を次に示します。
TEST_CASE( "Factorial/Handles zero input", "Tests factorial of 0.")
{
REQUIRE( Factorial(0) == 1 );
}
TEST_CASE( "Factorial/Handles positive input", "Tests factorial of positive numbers.")
{
REQUIRE( Factorial(1) == 1 );
REQUIRE( Factorial(2) == 2 );
REQUIRE( Factorial(3) == 6 );
REQUIRE( Factorial(8) == 40320 );
}
テストが失敗した場合でも、LHS と RHS の値が個別に記録されます。
GoogleTestFrameworkは代替手段です。
ドキュメントからの簡単な例を次に示します。
// Tests factorial of 0.
TEST(FactorialTest, HandlesZeroInput) {
EXPECT_EQ(1, Factorial(0));
}
// Tests factorial of positive numbers.
TEST(FactorialTest, HandlesPositiveInput) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}
また、GoogleのC++用モックフレームワークであるgmockともうまく連携します。
自分のコード開発者のために、 saru( http://github.com/mikeando/saru )というテストスイートを作成しました。そのBSDライセンスコード。他のテストスイートの機能のいくつかが気に入らなかったので、私はそれを開発しました。広く使用されていませんが、2つの会社にまたがるいくつかの商業プロジェクトで使用しました。
したがって、saruはこれらの機能のほとんどに対応しています。その焦点は、さまざまな言語で書かれた一連のテストを実行できるようにすることです。最小限のテストサイズで。これが最小の(失敗した)C++テストです
//SARU : dummy dummy
int main() { return (1==2)?0:1; }
saruが本当に気にするのは、コンパイルするバイナリの戻り値だけです。次に、出力を解析して、失敗したテストなどを判別します。上記の簡単な例よりもC++での作業を少し良くするためのヘッダーがあります。
//SARU : dummy dummy
#include "MyStruct.h"
#include "saru_cxx.h"
class Fixture
{
MyStruct s_;
Fixture() : s_() {}
void test_A_is_B()
{
SARU_ASSERT_EQUAL( s_.A(), s_.B() );
}
void test_C_is_7()
{
SARU_ASSERT_EQUAL( 7, s_.C() );
}
};
int main()
{
saru::TestLogger logger;
SARU_TEST( Fixture:: test_A_is_B, logger );
SARU_TEST( Fixture:: test_C_is_7, logger );
logger.printSummary();
return logger.allOK()?0:1;
}
または、C ++ヘッダーの動作が気に入らない場合は、最小限の困難で他の単体テストライブラリと統合できるはずです。
ただし、PHPとPythonで記述されたテストも実行されます。したがって、saruを使用して完全な機能テストを設定できます。または、テストスイートの一部としてコードに対してlintのようなものを実行することもできます。
CppUnit は、おそらく C++ の最初の単体テスト フレームワークです。これは、有名な Java フレームワークである Junit の直接ポートです。これにより、Junit からの移行が容易になりますが、フレームワークがやや重くなり、RAII などの C++ 機能を利用できなくなります。それが、CppUnitLite、NanoCppUnit などの軽量バージョンが作成された理由です。CppUnit2 は、他の改善の中でも特にこれを改善するはずでした。
Tut は以前はヘッダーが 1 つだけの非常に軽量でしたが、最新バージョンではライブラリが導入されました。
「標準」フレームワークに関する限り、そのようなものはなく、C++1X では定義されていません。
最小限の C++ ユニット テスト ライブラリは次のとおりです: https://github.com/vahidk/minimal-cpp-test
構文は Google テスト ライブラリと非常によく似ていますが、ヘッダーのみのライブラリであるため、プラットフォーム間での移植が容易です。
最小限の単体テストは次のとおりです。
#define DEFINE_TEST_MAIN
#include "test.h"
TEST(GroupName, TestName) {
EXPECT_EQ(1 + 2, 3);
}
そして最小限の備品:
class ClassName : public cyrus:Test {
public:
void Setup() override {
x = 5;
}
int x;
}
Test_F(ClassName, Test1) {
EXPECT_EQ(x, 5);
}
お役に立てれば。
以下は、C++ 単体テスト用のソリューションのみを含む単一のヘッダー ファイルです: https://gitlab.com/cppocl/unit_test_framework
ここで使用する簡単な例ですが、フィクスチャ (セットアップとティアダウン)、メモリ リークのテストの失敗、パフォーマンスのテストの失敗もあります (この機能は他では見たことがありません)。
#include "test/Test.hpp"
TEST(MyTest)
{
int a = 1;
int b = 2;
CHECK_EQUAL(a + b, 3);
}
これがユニットテストライブラリのリストです。
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B
しかし、私が知る限り、cppunitが最も人気があります。