青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

不倦的候鳥成長日記

——候鳥,候補的菜鳥也
隨筆 - 6, 文章 - 0, 評論 - 5, 引用 - 0
數(shù)據(jù)加載中……

[轉(zhuǎn)]Boost Test Library

boost 的 Test

test 庫中有如下的組件:
Execution Monitor  一個基本用于 program 和 test program 的異常與錯誤檢測與報告機制,Execution Monitor 調(diào)用用戶提供的函數(shù)并報告所有捕獲的運行時的異常,它只被其他 Boost Test Library components 內(nèi)部調(diào)用,當然也可以用于一些 production environment 控制那些會導(dǎo)致程序崩潰的函數(shù)的調(diào)用;

Program Execution Monitor  一個簡單的 helper facility 用于監(jiān)控一個程序的運行,Program Execution Monitor 提供了 main() 函數(shù)和 Execution Monitor 監(jiān)控程序的執(zhí)行,可以用以 production environment 產(chǎn)生一致錯誤報告,控制在 test environment 環(huán)境中運行的程序,直接使用 Test Execution Monitor;

Test Tools  一個用以進行 testing 的一個 toolbox,Test Tools 被用來測試在 Test Execution Monitor 或 Unit Test Framework 控制下運行的程序;

Test Execution Monitor  讓一個測試程序在 monitored environment 環(huán)境中運行,Test Execution Monitor 提供了 main() 來控制被測試程序的運行并可以讓 Test Tools 實現(xiàn)測試的邏輯,它被用在 test environment,如果要控制 production code 的運行使用 Program Execution Monitor;

Unit Test Framework  用以簡化編寫和組織 test cases 的 framework,支持簡單函數(shù)或者是成員函數(shù)編寫的 test cases 并將他們組織成一個 test suites 的 tree,該 framework 使用 Test Tools 來實現(xiàn) test cases 并提供了一種機制用以管理 log report level 和 result report level;

minimal testing facility  提供 Boost Test 最初版本的提供的功能的簡單 facility,提供了和 Test Execution Monitor 一樣的機制,但額外定義了一些簡單提供 Test Tools 類似功能的 test tools,它不需要和任何的外部組件 link,適合簡單和快速測試的需要,使用于 test environment。
(http://yaekees.spaces.live.com/blog/cns!1955EE8C6707277A!146.entry)


boost Test 的 Execution Monitor

使用 Execution Monitor 的三部曲:
1. #include <boost/test/execution_monitor.hpp>
2. Make an instance of boost::execution_monitor
3. Optionally register custom exception translators for exception classes you want special processing
 
調(diào)用 execution_monitor::execute( function_to_monitor, catch_system_exception, timeout ) 運行 monitored function。如果調(diào)用成功則返回一個 integer value,如果有如下的事情發(fā)生
1. Uncaught C++ exception
2. hardware or software signal, trap, or other exception
3. Timeout reached
4. debug assert event occurred (under Microsoft Visual C++ or compatible compiler)
the method execution_monitor::execute( ... ) throws the boost::execution_exception
如果希望程序 error message 被轉(zhuǎn)化為  execution_exception 的 error message,則扔出如下的三類異常:C string,std:string,any exception class in std::exception hierarchy。
 
終止 monitored function 而不讓 Execution Monitor 報告 any error 的最佳方法是拋出 boost::execution_aborted。如果不喜歡 "unknown exception caught" message 而更愿意使用自定義的 exception,可以向 execution monitor 為 any exception types 注冊 translator 函數(shù),如
ex_mon.register_exception_translator<my_exception1>( &translate_my_exception1 );
my_exception1 是異常類型,translate_my_exception1 是異常處理函數(shù)。
class execution_monitor {
public:
    virtual     ~execution_monitor();
   
    template<typename Exception, typename ExceptionTranslator>
    void        register_exception_translator( ExceptionTranslator const& tr, boost::type<Exception>* = 0 );
 
    int         execute( unit_test::callback0<int> const& F, bool catch_system_errors = true, int timeout = 0 );
}; // exception monitor
 
Execution Monitor 用 boost::execution_exception 報告捕獲的問題,其最大的特點是不分配任何 memory 因此在內(nèi)存稀缺環(huán)境中使用。
class execution_exception {
public:
    execution_exception( error_code ec, const_string what_msg );
    enum error_code {
        cpp_exception_error,    // see note (1) below
        user_error,             // user reported nonfatal error
        system_error,           // see note (2) below
        timeout_error,          // only detectable on certain platforms
        user_fatal_error,       // user reported fatal error
        system_fatal_error      // see note (2) below
    };
    error_code   code() const;  // use this method to get an error code for the exception
    const_string what() const;  // use this method to get an error message for the exception
};
Note 1 :uncaught C++ exceptions 被當做 error,如果應(yīng)用程序捕獲到 C++ exception,則該 exception 不會到 boost::execution_monitor;
Note 2 :這些 error 包括 UNIX signals 和 Windows structured exceptions,這些經(jīng)常由 hardware traps 觸發(fā)。

execution_monitor 可以動態(tài)連接,庫中沒有提供 main 函數(shù)。由于只有一個 libs/test/execution_monitor.cpp 文件,因此可以直接 copy 該文件。
(http://yaekees.spaces.live.com/blog/cns!1955EE8C6707277A!148.entry)


boost Test 的 Program Execution Monitor

C++ program 可以通過 return value 和 throwing an exception 報告 user-detected errors,而如 dereferencing an invalid pointer 的 System-detected errors 則以其他方式報告。
 
Boost Test Library 的 Program Execution Monitor 減輕了用戶處理復(fù)雜的 error detection 和 reporting,并提供了 main() 函數(shù)在 monitored environment 來調(diào)用用戶提供的 cpp_main() 函數(shù),main() 函數(shù)以一致的方式檢測和報告多種 errors 的發(fā)生,將其轉(zhuǎn)化為一致的 return code 返回給 host enviroment。
BOOST_TEST_CATCH_SYSTEM_ERRORS 設(shè)置允許 Execution Monitor 捕獲 system errors,默認值為 "yes"。
BOOST_PRG_MON_CONFIRM 設(shè)置是否允許用戶交互確認程序正確運行,默認值為"yes"。
 
Program Execution Monitor 使用 Execution Monitor 監(jiān)視用戶提供的 cpp_main() 函數(shù)的運行。盡管 Program Execution Monitor 在 libs/test/src/cpp_main.cpp 提供了 main() 函數(shù),但是為了 link 正確,用戶必須提供一個與 main() 函數(shù)一樣接口的 cpp_main() 函數(shù)。如 cpp_main() 拋出異常或返回非 0 值,Program Execution Monitor 就認為程序發(fā)生錯誤。
Program Execution Monitor 在 cout 和 cerr 流上分別提供詳細和簡要的錯誤報告。Program Execution Monitor 提供的 main() 函數(shù)返回如下的值
1. boost::exit_success - no errors
2. boost::exit_failure - non-zero and non-boost::exit_success return code from cpp_main().
3. boost::exit_exception_failure - cpp_main() throw an exception.
(http://yaekees.spaces.live.com/blog/cns!1955EE8C6707277A!149.entry)


boost Test 的 Test Tools

Test Tools 為了讓用戶使用方便,提供了一系列的宏,這些宏分三級,其效果是不同的:
WARN 不增加引用計數(shù),繼續(xù)執(zhí)行程序
CHECK 增加應(yīng)用計數(shù),繼續(xù)執(zhí)行程序
REQUIRE 增加應(yīng)用計數(shù),中斷程序的運行
 
使用 CHECK level tools 實現(xiàn) assertions,使用 WARN level tools 檢驗不太重要但是正確的方面,如:性能、可移植性、有用性,如 assertions 失敗就不應(yīng)該讓程序繼續(xù)運行則使用 REQUIRE level tools。
 
Test Tools 提供了兩個 .hpp 文件 boost/test/test_tools.hpp 和 boost/test/floating_point_comparison.hpp,一個 .cpp 文件 libs/test/test_tools.cpp
BOOST_WARN( P )
BOOST_CHECK( P )
BOOST_REQUIRE( P )
BOOST_WARN_MESSAGE( P, M )
BOOST_CHECK_MESSAGE( P, M )
BOOST_REQUIRE_MESSAGE( P, M )
BOOST_ERROR( M )BOOST_FAIL( M )
BOOST_MESSAGE( M )
BOOST_CHECKPOINT( M )
BOOST_WARN_THROW( S, E )
BOOST_CHECK_THROW( S, E )
BOOST_REQUIRE_THROW( S, E )
BOOST_WARN_EXCEPTION( S, E, P )
BOOST_CHECK_EXCEPTION( S, E, P )
BOOST_REQUIRE_EXCEPTION( S, E, P )
BOOST_IGNORE_CHECK( e )
BOOST_WARN_NO_THROW( S )
BOOST_CHECK_NO_THROW( S )
BOOST_REQUIRE_NO_THROW( S )
BOOST_WARN_CLOSE( L, R, T )
BOOST_CHECK_CLOSE( L, R, T )
BOOST_REQUIRE_CLOSE( L, R, T )
BOOST_WARN_SMALL( FPV, T )
BOOST_CHECK_SMALL( FPV, T )
BOOST_REQUIRE_SMALL( FPV, T )
BOOST_WARN_PREDICATE( P, ARGS )
BOOST_CHECK_PREDICATE( P, ARGS )
BOOST_REQUIRE_PREDICATE( P, ARGS )
BOOST_WARN_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )
BOOST_CHECK_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )
BOOST_REQUIRE_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )
BOOST_WARN_BITWISE_EQUAL( L, R )
BOOST_CHECK_BITWISE_EQUAL( L, R )
BOOST_REQUIRE_BITWISE_EQUAL( L, R )
BOOST_IS_DEFINED( symb )
BOOST_BITWISE_EQUAL( L, R )
(http://yaekees.spaces.live.com/blog/cns!1955EE8C6707277A!145.entry)


boost Test 的 Test Execution Monitor

Test Execution Monitor 結(jié)合了 Test Tools 和 Execution Monitor 的特點簡化了煩瑣測試工作,它提供了 main() 函數(shù)調(diào)用用戶提供的 test_main() 函數(shù),用戶可以使用 Test Tools 來進行復(fù)雜的驗證工作。
 
Test Execution Monitor 被設(shè)計用來進行測試簡單的程序或者從已存在的 production code 中 dig a problem。Program Execution Monitor 更適合監(jiān)控 production (non-test) programs(因為它不影響程序的性能),而 Unit Test Framework 更適合 complex test programs,因為 Unit Test Framework 可以
1. 可以將 test 分割到多個 test cases,它會為每一個 test case 分別產(chǎn)生 pass/fail 的統(tǒng)計信息;
2. 假如某一個 test case 失敗了不會影響其他的 test;
3. 可以通過指定 name 來運行特定的 test case
4. 分離的 test cases 運行更清楚發(fā)現(xiàn)特定測試模塊的目的
5. 可以設(shè)置更多的選項
(http://yaekees.spaces.live.com/blog/cns!1955ee8c6707277a!150.entry)


boost Test 的 Unit Test Framework

regression testing 只關(guān)注程序運行的時候是否有錯誤發(fā)生,而 unit test 則需要盡可能詳細的輸出錯誤的信息。Unit Test Framework 用 test tools 簡化了 test cases 的編寫并將其組織為有層次的 test suites。它提供了 main() 函數(shù)初始化 framework,通過命令行參數(shù)或者是環(huán)境變量設(shè)置參數(shù),并通過 init_unit_test_suite(argc, argv),然后運行用戶的 test suite。Framework 跟蹤所有的 passed/failed 的 Test Tools assertions,可以通過 test cases 的數(shù)目(part 和 total)得到測試進度,并且可以多種形式提供結(jié)果。Unit Test Framework 可被用來進行簡單測試和復(fù)雜重要測試,它不適合用在 production code,同時它以運行時的效率為代價加速編譯。
 
該函數(shù)負責(zé)創(chuàng)建和初始化頂層的 test_suite 實例,如 test_suite 創(chuàng)建失敗該函數(shù)返回 NULL 指針,測試終止并返回一個 boost::exit_test_failure。Framework 在測試運行時傳遞特定的命令行參數(shù),同時排斥其他 framework 指定的參數(shù),同時 framework 負責(zé) test_suite 的生命周期,在 test 終止時會被銷毀。
 
假如 test cases 會丟出自定義的異常,可以像 Execution Monitor 那樣注冊特定的 translator,注冊函數(shù)的原型定義如下
template<typename Exception, typename ExceptionTranslator>
void boost::unit_test::register_exception_translator( ExceptionTranslator const& tr, boost::type<Exception>* d = 0 )
 
一旦測試結(jié)束,framework 會報告結(jié)果并返回 return code。下面是集成在 unit test framework 內(nèi)部的的返回值
boost::exit_success  returned if no errors occurred during test or success result code was explicitly requested with the no result code framework parameter
boost::exit_test_failure  returned if nonfatal errors detected and no uncaught exceptions thrown or the framework fails to initialize the test suite
boost::exit_exception_failure  returned if fatal errors detected or uncaught exceptions thrown
 
在 VC7.1+stlport 4.62 上 unit_test_example3.cpp 沒有通過(對多種繼承沒有通過)
 
簡單的使用方法:
1. 首先定義 #define BOOST_AUTO_TEST_MAIN
2. 包含 #include <boost/test/auto_unit_test.hpp>
3. 創(chuàng)建一個 test_suite
BOOST_AUTO_TEST_CASE( test )
{
    BOOST_CHECK( true );
}
然后 link libboost_test_exec_monitor-vc71-mt-sp-1_33.lib 就可以了。
 
另一類使用方法,首先包含如下
#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_monitor.hpp>
using namespace boost::unit_test;
然后聲明 test_suite* init_unit_test_suite(int /*argc*/, char* /*argv*/[]) {}
一個典型用法是
test_suite* init_unit_test_suite( int /*argc*/, char* /*argv*/[] ) {
    test_suite* test = BOOST_TEST_SUITE("custom_exception_test");
    unit_test_monitor.register_exception_translator<my_exception1>( &my_exception1_translator );
    unit_test_monitor.register_exception_translator<my_exception2>( &my_exception2_translator );
    test->add( BOOST_TEST_CASE( &throw_my_exception1 ) );
    test->add( BOOST_TEST_CASE( &throw_my_exception2 ) );
    return test;
}
(http://yaekees.spaces.live.com/blog/cns!1955EE8C6707277A!151.entry)


boost 的 minimal testing facility

只適合使用在 test environment 中,不需要 link 任何外部的組件。用戶只需要提供了如下的函數(shù)
int test_main( int argc, char* argv[] ) 就可以了。minimal testing facility 提供了 BOOST_CHECK(predicate),BOOST_REQUIRE(predicate),BOOST_ERROR(message), BOOST_FAIL(message)。除了這四個 MACRO 以外可以通過拋出異常和 return 返回值報告錯誤。下面是 boost 提供的一個示例。
#include <boost/test/minimal.hpp>
int add( int i, int j ) { return i+j; }
int test_main( int, char *[] )             // note the name!
{
    // six ways to detect and report the same error:
    BOOST_CHECK( add( 2,2 ) == 4 );        // #1 continues on error
    BOOST_REQUIRE( add( 2,2 ) == 4 );      // #2 throws on error
    if( add( 2,2 ) != 4 )
      BOOST_ERROR( "Ouch..." );            // #3 continues on error
    if( add( 2,2 ) != 4 )
      BOOST_FAIL( "Ouch..." );             // #4 throws on error
    if( add( 2,2 ) != 4 ) throw "Oops..."; // #5 throws on error
    return add( 2, 2 ) == 4 ? 0 : 1;       // #6 returns error code
}
BOOST_CHECK 如果該表達式失敗了,會出現(xiàn)源代碼文件名、代碼行號、并且會增加 error count,一旦程序終止 error count 會顯示在 std::cout;
BOOST_REQUIRE 類似于 BOOST_CHECK,但是會拋出被  Minimal testing facility 捕獲的異常。
(http://yaekees.spaces.live.com/blog/cns!1955EE8C6707277A!147.entry)

posted on 2008-03-29 15:39 不倦 閱讀(3332) 評論(1)  編輯 收藏 引用 所屬分類: C++單元測試框架

評論

# re: [轉(zhuǎn)]Boost Test Library  回復(fù)  更多評論   

不錯不錯 很受教啊
美中不足的是具體的例子舉的太少了
2008-06-12 11:07 | jazz
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人精品午夜在线观看| 最新热久久免费视频| 99国产精品99久久久久久| 免费亚洲一区二区| 久久久久久久久久久久久久一区 | 国产精品久久久久久久久婷婷| 99国产精品自拍| 亚洲色图综合久久| 国产日本欧美在线观看| 久久婷婷激情| 老司机亚洲精品| 亚洲乱码国产乱码精品精可以看| 亚洲欧洲另类国产综合| 欧美日韩网站| 欧美一区三区二区在线观看| 久久精品亚洲| 中文久久乱码一区二区| 亚洲在线成人| 亚洲电影天堂av| 一区二区福利| 在线精品观看| 夜夜嗨av一区二区三区四区 | 美国十次了思思久久精品导航| 亚洲高清中文字幕| 99国产精品国产精品久久| 国产欧美一区二区三区另类精品| 免费成人激情视频| 欧美午夜精品理论片a级按摩| 久久久久久久91| 欧美日韩国产综合一区二区| 久久精品二区亚洲w码| 免费在线成人| 久久成人免费日本黄色| 欧美丰满少妇xxxbbb| 欧美亚洲视频| 欧美国产精品劲爆| 久久久97精品| 国产精品国码视频| 欧美国产国产综合| 国产亚洲激情在线| 一本大道久久精品懂色aⅴ | 国产精品亚洲精品| 亚洲国产精品久久久久| 国产日韩亚洲欧美精品| 亚洲美女少妇无套啪啪呻吟| 在线播放中文一区| 欧美一区二区啪啪| 亚洲男人第一av网站| 国产一区二区久久精品| 欧美日本在线播放| 欧美承认网站| 农夫在线精品视频免费观看| 亚洲愉拍自拍另类高清精品| 久久男人资源视频| av成人免费| 久久精品国产精品亚洲| 韩日在线一区| 国产一区二区| 国产精品乱码一区二三区小蝌蚪 | 亚洲激情成人网| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲黄一区二区| 久热精品视频在线| 免费久久精品视频| 伊人伊人伊人久久| 久久九九全国免费精品观看| 欧美一区二区三区视频免费| 国产精品看片你懂得| 亚洲婷婷综合久久一本伊一区| 中文欧美日韩| 国产精品日韩高清| 亚洲欧美综合国产精品一区| 亚洲欧美一区二区原创| 国产精品香蕉在线观看| 亚洲一区在线视频| 久久久水蜜桃| 一区二区视频在线观看| 久久免费高清| 亚洲国产一区二区视频| 日韩一二三区视频| 欧美系列电影免费观看| 亚洲综合第一| 另类天堂视频在线观看| 亚洲国产合集| 欧美日韩免费在线视频| 亚洲影院免费| 蜜桃久久av一区| 99pao成人国产永久免费视频| 欧美日本簧片| 午夜精品三级视频福利| 麻豆av福利av久久av| 日韩视频第一页| 欧美午夜无遮挡| 久久久久www| 亚洲人体大胆视频| 性娇小13――14欧美| 一区二区三区在线高清| 欧美日韩国产美女| 午夜亚洲影视| 91久久精品日日躁夜夜躁国产| 亚洲免费小视频| 在线成人av网站| 欧美性天天影院| 久久精品亚洲国产奇米99| 日韩午夜在线视频| 久久久久99| 中国亚洲黄色| 国产精品综合视频| 欧美插天视频在线播放| 中文精品视频| 亚洲电影免费在线| 亚洲免费影视| 91久久黄色| 国产午夜亚洲精品不卡| 欧美大尺度在线| 亚洲欧美激情视频| 久久人人爽国产| 亚洲欧美美女| 亚洲欧洲日产国产综合网| 国产精品麻豆欧美日韩ww| 欧美**人妖| 欧美在线欧美在线| 一区二区久久久久久| 欧美成人精品在线| 久久国产精品亚洲77777| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲国产99精品国自产| 国产精品美女久久久浪潮软件| 麻豆精品在线视频| 久久精品国产免费观看| 亚洲免费在线视频| 一区二区三区欧美| 亚洲国产日日夜夜| 欧美成人一区二区| 久久夜色精品一区| 久久成人资源| 香蕉久久夜色精品国产| 中文在线资源观看网站视频免费不卡 | 久久激情视频| 欧美亚洲一级片| 亚洲中字在线| 亚洲主播在线观看| 亚洲伦理一区| 一区二区三区www| 一区二区三区欧美视频| 亚洲精品国产欧美| 最新高清无码专区| 亚洲二区在线| 欧美激情a∨在线视频播放| 欧美va亚洲va日韩∨a综合色| 久久久午夜精品| 老司机午夜免费精品视频| 久久久国产视频91| 久久夜色精品国产亚洲aⅴ| 久久综合狠狠综合久久综青草| 久久精品国产一区二区三| 久久精品免费电影| 久久免费视频网站| 免费不卡欧美自拍视频| 欧美福利一区| 亚洲国产精品久久91精品| 亚洲精品久久久久久一区二区| 亚洲片在线观看| 日韩午夜精品视频| 午夜精品短视频| 久久国产精彩视频| 欧美~级网站不卡| 欧美日韩www| 国产美女诱惑一区二区| 国产亚洲成人一区| 136国产福利精品导航| 亚洲精品五月天| 午夜精品久久久久久久99热浪潮| 欧美在线播放| 欧美粗暴jizz性欧美20| 夜夜嗨网站十八久久| 欧美亚洲视频在线观看| 开心色5月久久精品| 欧美日韩成人在线| 国产日韩一区二区三区| 亚洲国产精品成人综合| 亚洲少妇在线| 蘑菇福利视频一区播放| 日韩亚洲精品电影| 欧美一区二区国产| 欧美高清视频| 国产精品伦一区| 亚洲国产精品www| 亚洲国产精品久久久久秋霞不卡| 最新高清无码专区| 欧美亚洲综合另类| 欧美日韩国产成人在线91| 国产一区二区精品在线观看| 夜夜嗨av一区二区三区网站四季av | 欧美日韩成人精品| 一区二区三区在线观看国产| 亚洲在线黄色| 亚洲国产精品成人| 欧美一区二区三区视频在线| 欧美精品在线一区|