Boost Test學習總結(C++)

來源:互聯網
上載者:User

1.常用的C++單元測試架構

測試驅動開發(TDD)已經是一種非常流行的開發方式了,在Java和.Net中都提供了非常好的單元測試架構,最近研究C++下面的單元測試,發現其實在C++中還是有很多選擇:

CPPUnit:著名的XUnit系列產品之一,熟悉JUnit、NUnit的開發人員可以很快上手。

CXXTest:需要進行預先處理,需要安裝Perl或Python。

Boost Test:功能強大,提供了自動註冊和手動註冊兩種方式,更重要的是來自千錘百鍊的Boost庫。

Google Test:Google在去年開源的測試架構,據說其內部上千個項目均採用該架構進行單元測試。

2.Boost Test起步

先來看一個簡單的Boost Test樣本(來自Boost文檔):

測試初步

1#define BOOST_TEST_MODULE example
2
3#include <boost/test/unit_test.hpp>
4
5
6
7int add(int i, int j);
8
9
10
11BOOST_AUTO_TEST_SUITE(minimal_test)
12
13
14
15BOOST_AUTO_TEST_CASE(my_test)
16
17{
18
19    BOOST_CHECK(add(2, 2) == 5);
20
21    BOOST_REQUIRE(add(2, 2) == 4);
22
23    if(add(2, 2) != 4)
24
25        BOOST_ERROR("oops!");
26
27    if(add(2, 2) != 4)
28
29        BOOST_FAIL("oops!");
30
31    if(add(2, 2) != 4)
32
33        throw "oops!";
34
35    BOOST_CHECK_MESSAGE(add(2, 2) == 4, "add(..) result: " << add(2, 2));
36
37    BOOST_CHECK_EQUAL(add(2, 2), 4);
38
39}
40
41
42
43BOOST_AUTO_TEST_SUITE_END()
44
45

首先,需要定義#define BOOST_TEST_MODULE example或者#define BOOST_AUTO_TEST_MAIN,否則測試模組初始化函數需要手動實現;然後宏“BOOST_AUTO_TEST_SUITE(minimal_test)”將建立一個名為minimal_test的測試套件,並將其加入到測試模組中。宏“BOOST_AUTO_TEST_CASE(my_test)”將建立一個名為“my_test”的測試案例,並將其加入到測試套件minimal_test中。

關於測試模組常犯的一個錯誤是在不同的測試檔案中定義不同的“#define BOOST_TEST_MODULE example”,最後將導致“multiple definition of ‘init_unit_test_suite(int, char**)’”錯誤,原因是在一個測試程式中只允許存在一個定義一個測試模組。測試模組中存在一個主測試套件,所有未明確包含到測試套件中的測試案例將被包含到主測試套件中。

下面是具體的測試過程了,在程式中展示了七種不同的方式來對函數add進行測試:

BOOST_CHECK:這種方法將檢查到的錯誤儲存起來,測試結束時由測試架構自動顯示;

BOOST_REQUIRE:同樣是檢查錯誤,與BOOST_CHECK不同之處在於如果發生錯誤時將拋出一個異常,因此後續的測試將不會繼續進行;

BOOST_ERROR:可以用來對錯誤進行獨立描述,測試結束時由測試架構自動顯示;

BOOST_FAIL:同樣可以用來對錯誤進行獨立描述,調用時將拋出一個異常;

拋出異常方式:測試架構將捕獲該異常並列印出錯誤資訊;

BOOST_CHECK_MESSAGE:與BOOST_CHECK類似,可以在第二個參數中加入錯誤描述資訊;

BOOST_CHECK_EQUAL:與BOOST_CHECKL類似,用來檢查兩個參數是否相等。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.