我刚开始使用 CxxTest 并想测试 std::vector 是否已正确排序。到目前为止,这是我的测试:
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用户指南,但不知道您是否可以编写这样的自定义断言。作为替代方案,我可以编写一个 IsSorted 类并实现它的operator()
. 然后我可以像这样编写测试:
void testSort() {
std::sort(vec.begin(), vec.end()); // This could be any sorting function
TS_ASSERT_PREDICATE(IsSorted, vec);
}
我猜这是正确的方法。但是,如果我这样做,我应该将定义class IsSorted
放在它自己的头文件中,与我的测试套件分开吗?我仍在尝试找出与单元测试相关的最佳实践,尤其是在这个框架中。
最后一个问题:我应该在setUp()
方法中还是在测试本身中对向量进行排序?