2010-03-01 50 views
4

在Boost.Test中使用自動測試用例時,有誰知道如何註冊自定義異常轉換器嗎?我發現了一些例子(實際上很少),但他們沒有說明如何將這個特性用於自動測試用例,這是我認爲boost.test最大的優勢。我的示例測試套件:Boost測試寄存器異常轉換器

#define BOOST_TEST_MODULE StateMachineTest 
    #define BOOST_TEST_DYN_LINK 

    #include <boost/test/unit_test.hpp> 

    BOOST_AUTO_TEST_SUITE (FirstTest); 

    BOOST_AUTO_TEST_CASE (testBasic) 
    { 
      BOOST_CHECK (true); 
    } 

    BOOST_AUTO_TEST_SUITE_END(); 

在此先感謝。

回答

1

(注:我仍然在使用Boost 1.34.1)

無論AUTO_TEST_CASE功能,註冊你需要實現init_unit_test_suite主要功能自定義異常處理程序。 (您不需要在那裏註冊任何自動測試。)

我所有的單元測試項目都使用包含(大致)以下內容的ut_main.cpp文件: (除了所有其他cpp文件外包含實際的自動測試)。

void translate_mfc_exception(CException* pMfcEx) { 
    ... 
    BOOST_ERROR(msg); 
} 
// ... 
using namespace ::boost::unit_test; 
test_suite* init_unit_test_suite(int argc, char* argv[]) 
{ 

    // Initialize global Handlers: 
    unit_test_monitor. 
    register_exception_translator<CException*>(&translate_mfc_exception); 

    // Return dummy suite to make framework happy: 
    test_suite* test = BOOST_TEST_SUITE("Empty Test Suite"); 
    return test; 
} 

除了您的自動測試案例外,這應該是您所需要的。本身你一般不希望趕上_pointers_例外,只是例外:

+0

注意。因此,在翻譯器arg/template參數中沒有'Exc *',只需'Exc'就可以讓你快樂。 – ron 2012-02-12 15:18:58

+0

@ron - *一般*是的,但閱讀我的來源!它說'translate_MFC_exception' ** MFC **異常是由指針*引發和捕獲的,所以是的,我需要通過指針捕獲這些異常。可能這不是最好的例子,但它在實踐中使用。 – 2012-02-12 18:06:51

1

另外,您可以在全球燈具註冊翻譯

+0

你能告訴我們如何? – rve 2011-03-22 13:24:12

+0

我發現如何:從燈具內調用'boost :: unit_test :: unit_test_monitor.register_exception_translator <>()'。 – rve 2011-03-22 13:49:38