我剛開始使用CxxTest,並想測試一個std :: vector是否已正確排序。下面是我的測試,到目前爲止:我可以在CxxTest中編寫自定義斷言嗎?
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
for (unsigned int i = 0; i < vec.size() - 1; ++i) {
TS_ASSERT(vec[i] <= vec[i + 1]);
}
}
顯然,CxxTest不提供TS_ASSERT_SORTED
斷言,但有編寫自定義斷言的方法嗎?這將允許我這樣做:
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
TS_ASSERT_SORTED(vec);
}
當用這種方式來寫這個測試時,看到測試的目的是非常容易的。
我查看了CxxTest user's guide,但無法弄清楚是否可以編寫像這樣的自定義斷言。作爲一種選擇,我可以寫一個IsSorted類並執行它的operator()
。然後我可以寫這樣的測試:
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
TS_ASSERT_PREDICATE(IsSorted, vec);
}
我猜這是正確的做法。但是,如果我這樣做,我應該將class IsSorted
的定義放在它自己的頭文件中,與我的測試套件分開嗎?我仍然試圖找出與單元測試相關的最佳實踐,特別是在這個框架中。
最後一個問題:我應該在setUp()
方法中還是在測試本身中排序向量?
'TS_ASSERT'宏必須做的不僅僅是返回一個bool ...否則,當測試失敗時如何輸出變量值? – ThisSuitIsBlackNot 2009-11-23 19:57:24