Нужны ли отдельные файлы для каждого теста ctest?

Я многого не понимаю, когда дело доходит до cmake и ctest. Я на самом деле не могу найти хороший учебник или что-то, что хорошо объясняет ctest.

Я попытался написать несколько тестов для моего кода. Я помещаю тесты в разные функции, которые все вызываются из main.cpp, вот так:

int main()
{
test1();
test2();
test3();
...
exit(0);
}

Я создал CMakeLists.txt для создания цели тесты.

set (TESTS
main.cpp
)
add_executable (tests ${TESTS})
target_link_libraries (tests ...)

enable_testing()
add_test(my-test tests)

Теперь я могу позвонить Ctest Run

$ ctest run
Test project /.../tests
Start 1: my-test
1/1 Test #1: my-test .........................   Passed    0.01 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) =   0.01 sec

Но это дает мне только один контрольный пример, хотя внутри у меня есть несколько контрольных примеров, каждый в отдельной функции. Я мог бы извлечь функции в отдельные файлы, но таким образом у меня были бы сотни файлов. Как можно избежать наличия отдельных файлов для каждого теста?

Я искал что-то вроде этого.

add_test( test1 tests::test1() )
add_test( test2 tests::test2() )

Я полностью осознаю, что это неправильно, наивно и так далее. Но я надеюсь, что вы поймете мою проблему.

0

Решение

CTest работает только с командами, т.е. исполняемыми файлами или эквивалентными. Это вызывает тест бегунов. Это не сам бегун.

Нормальный подход к тестированию

  1. использовать каркас тестирования, который поддерживает детальное тестирование и вывод результатов для создания участников тестирования, например Catch или Google Test / Google Mock или Python
  2. группировать участников тестирования по категориям, например, модульное тестирование или интеграция, и желательно в каждой категории организовывать по времени
  3. групповые тесты внутри каждого тестового прогона по модулю, то есть тестовый модуль никогда не тестирует более одного модуля.

Таким образом, с этой точки зрения ваша проблема выглядит как шаг 1: вам нужна среда тестирования для создания детального теста.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector