CppUnit使用指南

技術小美發表於2017-11-15

CppUnit的原理

在 CppUnit 中,一個或一組測試用例的測試物件被稱為 Fixture。Fixture 就是被測試的目標,可能是一個物件或者一組相關的物件,甚至一個函式。

有了被測試的fixture,就可以對這個 fixture 的某個功能、某個可能出錯的流程編寫測試程式碼,這樣對某個方面完整的測試被稱為TestCase(測試用例)。

通常寫一個 TestCase 的步驟包括:

1) 對 fixture 進行初始化,及其他初始化操作,比如:生成一組被測試的物件,初始化值; 

2) 按照要測試的某個功能或者某個流程對 fixture 進行操作; 

3) 驗證結果是否正確; 

4) 對 fixture 的及其他的資源釋放等清理工作。

對 fixture 的多個測試用例,通常(1)、(4)部分程式碼都是相似的,CppUnit在很多地方引入了setUp和tearDown虛擬函式。可以在 setUp 函式裡完成(1)初始化程式碼,而在 tearDown 函式中完成(4)程式碼。具體測試用例函式中只需要完成(2)、(3)部分程式碼即可,執行時 CppUnit 會自動為每個測試用例函式執行 setUp,之後執行 tearDown,這樣測試用例之間就沒有交叉影響。

撰寫TestCase必須注意以下幾點:

可以自動執行,不用人手操作

自動返回測試結果

絕對的獨立,不能與其他TestCase有任何聯絡。就算測試同一個函式的不同功能也需要分開。每個TestCase可以說是一個孤島

對 fixture 的所有測試用例可以被封裝在一個 CppUnit::TestFixture 的子類(命名慣例是[ClassName]Test)中。然後定義這個fixture 的 setUp 和 tearDown 函式,為每個測試用例定義一個測試函式(命名慣例是 testXXX)。下面是個簡單的例子:




 

在測試函式中對執行結果的驗證成功或者失敗直接反應這個測試用例的成功和失敗。CppUnit 提供了多種驗證成功失敗的方式:

 



要把對 fixture 的一個測試函式轉變成一個測試用例,需要生成一個 CppUnit::TestCaller 物件。而最終執行整個應用程式的測試程式碼的時候,可能需要同時執行對一個 fixture 的多個測試函式,甚至多個 fixture 的測試用例。CppUnit 中把這種同時執行的測試案例的集合稱為 TestSuite。而 TestRunner 則執行測試用例或者 TestSuite,具體管理所有測試用例的生命週期。目前提供了 3 類TestRunner,包括:

 



下面是一個TestRunner的例子:

 


常用使用方式

按照上面的方式,如果要新增新的測試用例,需要把每個測試用例新增到 TestSuite 中,而且新增新的 TestFixture 需要把所有標頭檔案新增到 main.cpp 中,比較麻煩。為此 CppUnit 提供了 CppUnit::TestSuiteBuilder,CppUnit::TestFactoryRegistry 和一堆巨集,用來方便地把 TestFixture 和測試用例註冊到 TestSuite 中。下面就是通常的使用方式(注意紅色字型):




 




 




 




 



這樣新增新的測試用例(TestFixture)只需要在類定義的開始宣告一下即可。

(全文完)

本文轉自百度技術51CTO部落格,原文連結:http://blog.51cto.com/baidutech/744527,如需轉載請自行聯絡原作者