Нужны ли мне отдельные файлы для каждого теста с помощью 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() )

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


person Sadik    schedule 22.08.2017    source источник


Ответы (1)


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

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

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

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

person utopia    schedule 22.08.2017
comment
Я использовал cmocka, с хорошими результатами. Но это только для С - person jerrylogansquare; 22.08.2017