我們知道一個完整的測試框架還需要有用例過濾和用例統(tǒng)計匯報的功能羊始。由于模板元編程基本沒有任何IO能力楣责,所以用例過濾和統(tǒng)計只能借助別的手段(對于用例統(tǒng)計匯報垦缅,倒是可以在元編程范疇內(nèi)完成确憨,但是用例統(tǒng)計結(jié)果靠編譯告警打印出來格式太難看)国撵。因此我們最后還是使用了一些運(yùn)行期C++的IO能力。
我們在FIXTURE
和TEST
的宏里面加了一些針對fixture和testcase的注冊代碼成黄,用戶定義的所有fixture和test都會被統(tǒng)計到呐芥。如果你希望最終能夠打印出用例統(tǒng)計結(jié)果逻杖,那么定義一個main函數(shù),調(diào)用一下TLP_REPORT_ALL_TESTS()
即可思瘟。如下:
#include <tlp/test/Test.hpp>
int main()
{
TLP_REPORT_ALL_TESTS();
return 0;
}
實(shí)現(xiàn)上述代碼后荸百,測試用例就可以編譯成一個可執(zhí)行程序。運(yùn)行該可執(zhí)行程序潮太,就會在終端上以我們熟悉的樣式打印出所有的fixture和test的統(tǒng)計情況管搪。
注意上述main函數(shù)僅是為了輸出測試報告。測試用例的運(yùn)行仍舊是在編譯期铡买,一旦編譯完成就說明所有測試用例都通過了更鲁。如果你不需要測試報告,那么就可以不用實(shí)現(xiàn)這個main函數(shù)奇钞。關(guān)于測試用例注冊和打印的實(shí)現(xiàn)澡为,完全是運(yùn)行期C++的技術(shù),和本文無關(guān)景埃,這里就不再贅述媒至。
至此,整個TLP測試框架涉及到的主要技術(shù)就介紹到這里谷徙。掌握一門語言最好的方式是從對它進(jìn)行測試入手拒啰,C++模板元編程也不例外。后面對TLP庫中其它內(nèi)容的介紹完慧,都會涉及到對其的測試谋旦。如果你還對該測試框架的其它代碼細(xì)節(jié)感興趣,可以直接訪問TLP庫屈尼,測試框架的所有源代碼在"include/tlp/test"目錄下册着。