2011-08-01 38 views
2

在Windows 86,TI的Android使用Boost 1.46.1 2.2加速測試案例和套房燈具

我定義我自己的測試套件的樹,因爲我需要的用戶選擇的測試順序。儘管我知道測試應該是獨立的,但這是一項要求。測試套件樹使用我自己的實現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單元測試框架中使用燈具。一個整潔的方式。

有一些解決方法:

  • 測試套件夾具 - 可以被定義爲中 第一和最後一個測試的兒童套房/件。然而,這會影響測試結果,並且 作爲單獨的測試,這不是一個很好的解決方案。
  • 測試用例夾具 - 通過圍繞測試用例 功能包裝一個範圍實例。

有沒有其他的,更清潔和更好的解決我的問題?我真的沒有資源深入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

回答

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() 

這足以進行測試。

+0

謝謝你的努力Alexandr。然而,這個自動測試案例/套件解決方案並不是我所期待的。使用這些宏可以在編譯時定義順序,並且還可以在一個文件中定義測試。我正在尋找只能通過重新定義'test_suite * init_unit_test_suite(int,char **)'函數才能實現的運行時訂單配置。你的代碼和'BOOST_FIXTURE_TEST_CASE(Test1,TestClass1)'一樣(在Test1的情況下)。 – Sha