我刚开始使用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