Я только начинаю использовать 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