Я многого не понимаю, когда дело доходит до 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() )
Я полностью осознаю, что это неправильно, наивно и так далее. Но я надеюсь, что вы поймете мою проблему.
CTest работает только с командами, т.е. исполняемыми файлами или эквивалентными. Это вызывает тест бегунов. Это не сам бегун.
Нормальный подход к тестированию
Таким образом, с этой точки зрения ваша проблема выглядит как шаг 1: вам нужна среда тестирования для создания детального теста.
Других решений пока нет …