原創|其它|編輯:郝浩|2009-05-19 14:09:45.000|閱讀 1904 次
概述:測試驅動開發(TDD)已經是一種非常流行的開發方式了,在Java和.Net中都提供了非常好的單元測試框架,最近研究C++下面的單元測試,發現其實在C++中還是有很多選擇。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
show_progress 設置為 yes 將在運行測試時顯示當前的進度。
測試驅動開發( TDD 已經是一種非常流行的開發方式了 Java 和 .Net 中都提供了非常好的單元測試框架,#defin BOOST_TEST_MODULE example 或者 #defin BOOST_AUTO_TEST_MAIN 否則測試模塊初始化函數需要手動實現;然后宏 “ BOOST_AUTO_TEST_SUITE minimal_test 將創建一個名為 minimal_test 測試套件, 首先。并將其加入到測試模塊中。宏 “ BOOST_AUTO_TEST_CASE my_test 將創建一個名為 “ my_test 測試用例,并將其加入到測試套件 minimal_test 中。 #defin BOOST_TEST_MODULE example 最后將導致 “ multipl definit of init_unit_test_suit int, char** 錯誤。>BOOST_AUTO_TEST_CASE 不能滿足需求, 有時候需要對一個測試用例使用不同的參數運行測試。此時需要對測試用例進行手動注冊(來自 Boost 文檔) free_test_function 然后定義 init_unit_test_suite 函數, 示例代碼將會分別以參數 1 2 3 4 5 運行測試 free_test_function 五次。手動注冊需要定義測試函數。并在該函數中將測試用例加入到主測試套件中。 BOOST_PARAM_TEST_CASE 有三個參數:第一個參數為測試函數指針,第二個與第三個為輸入參數迭代器。 Boost Test 采用 RAII 技術來實現夾具: 如果在多個測試用例中需要使用數據庫連接。>
< 測試驅動開發( TDD 已經是一種非常流行的開發方式了 Java 和 .Net 中都提供了非常好的單元測試框架。最近研究 C++ 下面的單元測試,發現其實在 C++ 中還是有很多選擇:
先來看一個簡單的 Boost Test 示例(來自 Boost 文檔)
1#define BOOST_TEST_MODULE example 2
3
#include <boost/test/unit_test.hpp> 4
5
6
int j 7
int add int i.; 8
9
10
11
BOOST_AUTO_TEST_SUITE minimal_test 12
13
14
15
BOOST_AUTO_TEST_CASE my_test 16
17
{18
2 == 5 19
BOOST_CHECK add 2.;20
2 == 4 21
BOOST_REQUIRE add 2.;22
2 != 4 23
if add 2. 24
25
BOOST_ERROR "oops!" ;26
2 != 4 27
if add 2. 28
29
BOOST_FAIL "oops!" ;30
2 != 4 31
if add 2. 32
33
throw "oops!";34
2 == 4,35
BOOST_CHECK_MESSAGE add 2. "add .. result: " << add 2, 2 ;36
2 ,37
BOOST_CHECK_EQUAL add 2. 4 ;38
39
}40
41
42
43
BOOST_AUTO_TEST_SUITE_END 44
45
需要定義
原因是一個測試順序中只允許存在一個定義一個測試模塊。測試模塊中存在一個主測試套件,所有未明確包含到測試套件中的測試用例將被包含到主測試套件中。 關于測試模塊常犯的一個錯誤是不同的測試文件中定義不同的
下面是具體的測試過程了順序中展示了七種不同的方式來對函數 add 進行測試:
拋出異常方式:測試框架將捕獲該異常并打印出錯誤信息;
前面提到
#include <boost/test/included/unit_test.hpp><boost/test/parameterized_test.hpp>using namespace boost::unit_test;void free_test_funct int i < 4 /* test assertion */ ;char* argv[] test_suite* init_unit_test_suit int argc. 2, int params[] = { 1. 3, 4, 5 };params, add BOOST_PARAM_TEST_CASE &free_test_function. params+5 ;return 0;
#include
{
BOOST_CHECK i
}
{
framework::master_test_suit .
}
這時候要用到夾具來自動執行安裝、清理過程。
1struct <fixture-name>{2
3
<fixture-name> ; // 裝置 4
5
~<fixture-name> ; // 裝配 6
7
};
只需要定義一個類, 自定義一個夾具非常簡單。分別在類的構造函數和析構函數中進行裝置和拆卸。另外,類的公有成員在測試用例中可以直接引用而不需要加上對象名作為前綴。例如:
1#define BOOST_TEST_MODULE example 2
3
#include <boost/test/included/unit_test.hpp> 4
5
6
7
struct F 8
9
{10
11
F : i 0 12
13
{14
15
//std::cout << " 創建夾具 " << std::endl;16
17
}18
19
~F 20
21
{22
23
//std::cout << " 銷毀夾具 " << std::endl;24
25
}26
27
28
29
int i;30
31
};32
33
34
35
BOOST_FIXTURE_TEST_SUITE const_string_test. 36
37
38
39
BOOST_FIXTURE_TEST_CASE test_case1. 40
41
{42
43
BOOST_CHECK i == 1 ;44
45
++i;46
47
}48
49
50
51
BOOST_FIXTURE_TEST_CASE test_case2 52
53
{54
1 55
BOOST_CHECK_EQUAL i.;56
57
}58
59
60
61
BOOST_AUTO_TEST_CASE test_case3 62
63
{64
65
BOOST_CHECK true ;66
67
}68
69
70
71
BOOST_AUTO_TEST_SUITE_END 72
73
夾具將在該測試套件的所有測試用例中可用。使用宏 BOOST_FIXTURE_TEST_CASE 代替宏 BOOST_AUTO_TEST_CASE 建立測試用例, 使用宏 BOOST_FIXTURE_TEST_SUITE 第二個參數中指定夾具來代替宏 BOOST_AUTO_TEST_SUITE 以建立測試套件。可以在該測試用例中使用夾具。需要注意的每一個測試用例中都將會執行夾具的裝置和卸載過程。 log_level 中設置, 以上級別以由低到高的級別排列。還可以使用參數 log_format 來制定輸出格式。 test.ex – build_info=y – log_level=all 下面是常用的測試參數: 可以向測試順序傳送參數來定制測試結果。>
Boost Test 中包括了十個級別的日志信息:
可以在運行時參數
如 “
build_infoa 設置為 yes 將在開始運行測試前打印當前的操作系統版本、編譯器版本等信息;
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園