感謝原創
記得2023年的春節假期,難得有時間可以靜下來充充電,於是有了研讀cppunit原始碼的念頭。一來是為了熟悉cppunit的使用環境,而來也是希望通過研讀原始碼汲取有益的東西,這一系列的文章便是整理自筆者當初的原始碼閱讀筆記。
如何將諸多技術綜合運用到乙個實際的framework中來,筆者以為,cppunit為我們提供了乙個難易適中的參考範例。這應該是乙個很好的例子,因為它不甚複雜,卻匯聚了乙個framework所必需的某些設計思想以及實現技巧。在這裡,我們可以看到stl的實際使用(包括一些簡單的traits技法),design pattern的靈活運用(比如:composite,factory,decorator,singleton,observer等)。
當然,也應該指出,由於cppunit還在不斷改進中,其**中未免還有「敗筆」及不盡如人意之處。但是,瑕不掩瑜,並且從中我們也可以感受到乙個成熟框架的演進過程。
由於有過一點framework的設計經驗和體會,筆者在閱讀cppunit原始碼的過程中,時常能有共鳴,並且對於框架的設計者在某些細節的處理方法,也深以為然,偶爾也有「英雄所見略同」的感嘆。希望可以通過筆者的講解,使大家也能夠同樣有親歷之感。
cppunit是xunit系列中的c++實現版本,它是從junit移植過來的,第乙個移植版本由michael feathers完成,相關資訊可以在找到。它是作業系統相關的,隨後,jerome lacoste將之移植到了unix/solaris,在上述連線中也能找到該版本的相關資訊。cppunit專案就是基於這些版本建立起來的。有關cppunit的討論可以在找到,在那裡你還可以找到cppunit先前的版本以及許多其它作業系統環境下的移植版本。這個庫受gnu lgpl(lesser general public license)的保護。作者包括:eric sommerlade ([email protected]),michael feathers ([email protected]),jerome lacoste ([email protected]),j.e. hoffmann ,baptiste lepilleur ,bastiaan bakker ,steve robbins
上述所有的內容均被置於cppunit名字空間之內。
對於文中所涉及的design pattern,refactoring,stl等相關知識,請讀者參看相關資料。
除了文章本身,文中所列原始碼,也夾帶了morning的一些注釋,用以進一步說明**意圖,注釋中方括號內為morning的疑問
為了節省篇幅、簡化內容、突出主題,文中未列出全部**,而是有選擇的給出部分**
01 cppunit 原始碼解讀
背景 相關 stl 標準模板庫 有六大元件 容器 迭代器 演算法 仿函式 迭代介面卡 空間配置器 design pattern 設計模式 design pattern 代表了最佳的實踐,通常被有經驗的物件導向的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。cpp...
學習筆記 解讀CppUnit原始碼2
上次我詳細的剖析了與test.h相互關聯的 test類是cppunit的核心。test這個類相信看了上一章就知道,也就起到測試用例的作用,但是畢竟乙個類的功能有限,如何擴充test類的功能呢?下面裝飾者模式就登場了。testdecorator.h 這個類中儲存了乙份test的指標,這個類的count...
學習筆記 解讀CppUnit原始碼6
看了前面5章的話,就可以了解cppunit大致的結構了。這裡講講一些並不是很核心但卻是不可貨缺的 看看他們雖然學不到優秀的設計知識,但是鞏固一下c 的基礎也不錯。sourceline.h c中關於檔名和 所在的行數有兩個巨集定義 file line 方便在除錯和其他場合輸出。而這個sourcelin...