2

Windows x86、AndroidTI2.2でBoost1.46.1を使用する

ユーザーがテストの順序を選択する必要があるため、独自のテストスイートツリーを定義しました。テストは独立している必要があることは承知していますが、これは必須です。テストスイートツリーは、私自身の実装を使用して再定義されましたtest_suite* init_unit_test_suite(int, char**)

自動テストケースと自動テストスイートには、Boostマクロがあります:BOOST_FIXTURE_TEST_CASEBOOST_FIXTURE_TEST_SUITE( suite_name, F )。これらのマクロは関数をに登録しますがframework::master_test_suite()、この場合は望ましくない動作です。

グローバルフィクスチャ(BOOST_GLOBAL_FIXTURE(fixure_name))は、手動テストスイート定義では影響を受けません。

手動で定義されたテストスイートとケースには、Boost UnitTestingFrameworkのフィクスチャを使用したいと思います。きちんとした方法。

いくつかの回避策があります:

  • テストスイートフィクスチャ-子スイート/ケースの最初と最後のテストとして定義できます。ただし、これはテスト結果に影響を与え、個別のテストとして機能しますが、これは実際には優れたソリューションではありません。
  • テストケースフィクスチャ-スコープインスタンスをテストケース関数の周りにラップします。

私の問題に対する他のよりクリーンでより良い解決策はありますか?Boostライブラリを深く掘り下げるためのリソースが本当にありません。一方で、私の側のコードの品質と可読性を大幅に低下させたくはありません。

よろしく、LK

#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/test/unit_test.hpp>
using namespace boost::unit_test;

BOOST_GLOBAL_FIXTURE(GFixture);

test_suite* init_unit_test_suite( int, char** )
{
    test_suite* ts1 = BOOST_TEST_SUITE( "Suite1" );

    boost::shared_ptr<TestClass1> test1 ( new TestClass1 );
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass1::Run, test1)));
    boost::shared_ptr<TestClass2> test2 ( new TestClass2 );
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass2::Run, test2)));
    boost::shared_ptr<TestClass3> test3 ( new TestClass3);
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass3::Run, test3)));

    framework::master_test_suite().add( ts1 );
    return 0;
}

ユニットテストフレームワーク:ユーザーガイド
http://www.boost.org/doc/libs/1_46_1/libs/test/doc/html/utf/user-guide.html

4

1 に答える 1

0

次のコードを検討してください。

#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#include <boost/test/unit_test_suite.hpp>

BOOST_GLOBAL_FIXTURE( ... );

BOOST_AUTO_TEST_SUITE( Suite1 )

    BOOST_AUTO_TEST_CASE( Test1 )
    {
        TestClass1 testClass;

        testClass.Run();
    }


    BOOST_AUTO_TEST_CASE( Test2 )
    {
        TestClass2 testClass;

        testClass.Run();
    }

    BOOST_AUTO_TEST_CASE( Test3 )
    {
        TestClassT testClass;

        testClass.Run();
    }

BOOST_AUTO_TEST_SUITE_END()

これは、テストを実行するのに十分です。

于 2011-08-03T11:07:57.843 に答える