14

私はかなり長い間CppUnitを使用しています(そしてそれに満足しています)。Boostライブラリの使用する部分が増えているので、boost.testをざっと見てみましたが、新しいプロジェクトでboost.testに切り替える必要があるかどうか疑問に思っています。

ここにいる誰かが、2つのフレームワークの違いと、boost.testを使用する利点(ある場合)について教えてもらえますか?

4

2 に答える 2

43

これはBoost.Testの代替案よりも不格好ではありませんか?

class MyFixture { MyFixture() { /* setup here */} };

BOOST_AUTO_TEST_CASE( my_test, MyFixture )
{
    BOOST_CHECK_EQUAL(0, foo);
}

マクロは確かに少し長くなりますが、これはより安全であり、C++での実践をお勧めします。

私はまだGoogleTestを好む単一の技術的理由を見ていません(そして私はBoost.Testを好むかなりの数を知っています)。残りはあなたの好みです。

于 2011-03-17T00:36:46.253 に答える
16

好意を持ってGoogleTestに直接アクセスすると、CppUnitboost::unit_testが不格好で反復的に見えます。

たとえば、単純なフィクスチャがあるとします。

class MyFixture : public ::testing::Test
{
  protected:
  int foo;

  virtual void SetUp() { foo = 0; }
};

フィクスチャにテストを追加するには、それを書いてください!

TEST_F(MyFixture, FooStartsAtZero) {
  EXPECT_EQ(0, foo);
}

必要なのはそれだけです。明示的なテストスイート宣言またはすべてのテストの名前を繰り返す別のアジェンダがないことに注意してください。

次のようにコンパイルします

$ g ++ -o utest utest.cpp -lgtest -lgtest_main

テストを実行して取得します

gtest_main.ccからmain()を実行する
[==========]1つのテストケースから1つのテストを実行します。
[----------]グローバルテスト環境のセットアップ。
[----------]MyFixtureからの1つのテスト
[実行]MyFixture.FooStartsAtZero
[OK] MyFixture.FooStartsAtZero(0ミリ秒)
[----------] MyFixtureからの1つのテスト(合計0ミリ秒)

[----------]グローバルテスト環境の分解
[==========]1つのテストケースから1つのテストが実行されました。(合計0ミリ秒)
[合格]1テスト。

(自分で実行して、テストに合格するための素敵な緑色のテキストを確認してください!)

これは序章に過ぎない。Google Test入門書高度なガイドを見て、他に何ができるかを確認してください。

于 2010-06-27T00:01:53.943 に答える