Как создать тесты для "make check" с помощью GNU autotools
Я использую GNU autotools для системы сборки в конкретном проекте. Я хочу начать писать автоматические тесты для проверки. Я хотел бы просто ввести "make check", чтобы он автоматически запускал их. Мой проект на C++, хотя мне все еще интересно писать автоматические тесты для других языков.
совместимо ли это практически с каждой платформой модульного тестирования (я думал об использовании cppunit)? Как подключить эти модульные тесты в рамках проверки? Могу ли я убедиться, что мне не требуется устанавливать программное обеспечение модульного тестирования для настройки и сборки остальной части проекта?
4 ответов
чтобы сделать тестовый запуск при выпуске make check
, вам нужно добавить их в TESTS
переменная
предполагая, что вы уже создали исполняемый файл, который запускает модульные тесты, вы просто добавляете имя исполняемого файла в переменную TESTS следующим образом:
TESTS=my-test-executable
он должен быть автоматически выполняться, когда вы make check
, и если исполняемый файл возвращает ненулевое значение, он сообщит об этом как об ошибке теста. Если у вас есть несколько исполняемых файлов модульного теста, просто перечислите их все в TESTS
переменной:
TESTS=my-first-test my-second-test my-third-test
и они будут работать.
Я использую проверить 0.9.10
configure.ac
Makefile.am
src/Makefile.am
src/foo.c
tests/check_foo.c
tests/Makefile.am
-
./configure.ac
PKG_CHECK_MODULES ([проверить], [проверить >= 0.9.10])
-
./tests/Makefile.am
для теста кодыTESTS = check_foo check_PROGRAMS = check_foo check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h check_foo_CFLAGS = @CHECK_CFLAGS@
-
и написать тестовый код,
./tests/check_foo.c
START_TEST (test_foo) { ck_assert( foo() == 0 ); ck_assert_int_eq( foo(), 0); } END_TEST /// And there are some tcase_xxx codes to run this test
С помощью проверки вы можете использовать тайм-аут и поднять сигнал. это очень полезно.
вы, похоже, задаете 2 вопроса в первом абзаце.
первый касается добавления тестов в цепочку инструментов GNU autotools-но эти тесты, Если я правильно вас понимаю, предназначены как для проверки того, что среда, необходимая для создания вашего приложения, существует (зависимые библиотеки и инструменты), так и для адаптации сборки к среде (отличия от платформы).
второй - о модульном тестировании вашего приложения на C++ и где их вызывать тесты, которые вы предложили сделать из цепочки инструментов autotools, предположительно из сценария configure. Однако это не является обычным - размещение "тестовой" цели в вашем Makefile является более обычным способом выполнения Вашего набора тестов. Типичные шаги для создания и установки приложения с autotools (по крайней мере, с точки зрения пользователя, а не с точки зрения разработчика) - запустить сценарий Настройки, затем запустить make, затем необязательно запустить make test и, наконец, make установить.
для второй проблемы, не желая cppunit быть зависимостью, почему бы просто не распространять его с помощью приложения c++? Можете ли вы просто поместить его в какой-либо формат архива, который вы используете (будь то tar.gz, tar.bz2 или .зип) вместе с исходным кодом. Я использовал cppunit в прошлом и был доволен этим, используя JUnit и другие рамки стиля xUnit.
вы можете использовать Automake в TESTS
для запуска программ, созданных с помощью check_PROGRAMS
но это будет предполагать, что вы используете драйвер журнала и компилятор для вывода. Вероятно, проще использовать check_PROGRAMS
но для вызова набора тестов с помощью локального правила в файле Makefile:
check_PROGRAMS=testsuite
testsuite_SOURCES=...
testsuite_CFLAGS=...
testsuite_LDADD=...
check-local:
./testsuite