在學習完單元測試(boost unit test)后,嘗試在工程中加入單元測試,走了一些彎路,特別處理功能代碼和測試代碼的關系。目前找到了一種較好的解決方法。本方法只在VC2005使用過,在其它集成環境沒有使用經驗,但應該類似吧。
具體方法是將整個項目分成三部分:靜態庫工程、目標工程和測試工程。靜態庫工程是一個靜態庫工程,它包含整個項目絕大部分功能代碼。目標工程是在靜態庫工程上封裝一層,從而產生最終需要的dll或exe工程,如提供main函數,然后轉調靜態庫工程的函數。測試工程包含單元測試代碼,該工程鏈接靜態庫,最終產生單元測試程序。目標工程和測試工程倚賴靜態庫工程。此外可以利用項目的build-event,即目標工程編譯前,先運行但單元測試程序。
在我之前的方法中,將所有代碼放入一個工程,采用宏UNIT_TEST來區分測試代碼,這個方法有很多缺點,如代碼編譯兩次,不容易添加build-event等等。
大家如果有其它好的方法,一起交流討論。