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