Как вы создаете тесты для "make check" с помощью GNU autotools
Я использую GNU autotools для системы сборки для конкретного проекта. Я хочу начать писать автоматические тесты для проверки. Я хотел бы просто набрать "make check", чтобы он автоматически запускал их. Мой проект находится на С++, хотя мне все еще интересно писать автоматические тесты для других языков.
Является ли это совместимым с почти всеми модулями тестирования модулей там (я думал об использовании cppunit)? Как я могу подключить эти модульные модули тестирования для проверки? Могу ли я удостовериться, что я не требую установки программного обеспечения unit test для настройки и создания остальной части проекта?
Ответы
Ответ 1
Чтобы выполнить пробный запуск при выпуске make check
, вам нужно добавить их в переменную TESTS
Предполагая, что вы уже создали исполняемый файл, который запускает модульные тесты, вы просто добавляете имя исполняемого файла в переменную TESTS следующим образом:
TESTS=my-test-executable
Затем он должен автоматически запускаться, когда вы make check
, и если исполняемый файл возвращает ненулевое значение, он будет сообщать об этом как об ошибке тестирования. Если у вас несколько исполняемых файлов unit test, просто перечислите их все в переменной TESTS
:
TESTS=my-first-test my-second-test my-third-test
и все они будут запущены.
Ответ 2
Я использую Check 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 ([CHECK], [check >= 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 = @[email protected]
-
и напишите тестовый код ./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
С помощью проверки вы можете использовать таймаут и сигнал повышения. это очень полезно.
Ответ 3
Кажется, вы задаете два вопроса в первом абзаце.
Первый заключается в добавлении тестов в инструментальную цепочку GNU autotools, но эти тесты, если я правильно вас понимаю, предназначены для проверки того, что среда, необходимая для создания вашего приложения, существует (зависимые библиотеки и инструменты), а также адаптируется сборка для среды (специфические для платформы различия).
Во-вторых, о модульном тестировании вашего приложения на С++ и о том, где вызывать эти тесты, вы предложили сделать это из цепочки инструментов autotools, предположительно из конфигурации script. Выполнение этого не является общепринятым, но ставить цель "тест" в Makefile - это более обычный способ выполнения вашего тестового набора. Типичные шаги для создания и установки приложения с помощью autotools (по крайней мере, с точки зрения пользователя, а не с вашего разработчика, перспектива) - это запустить configure script, затем запустить make, а затем выполнить запуск make-теста и, наконец, выполнить установку.
Во второй проблеме, не требующей, чтобы cppunit был зависимым, почему бы просто не распространять его с вашим приложением на С++? Можете ли вы просто исправить это в любом архиве, который вы используете (будь то tar.gz, tar.bz2 или .zip) вместе с исходным кодом. Я использовал cppunit в прошлом и был доволен этим, используя JUnit и другие рамки стиля xUnit.
Ответ 4
Вы можете использовать Automake TESTS
для запуска программ, сгенерированных с помощью check_PROGRAMS
, но это предполагает, что вы используете драйвер журнала и компилятор для вывода. Вероятно, проще использовать check_PROGRAMS
, но вызывать тестовый набор, используя локальное правило в Makefile:
check_PROGRAMS=testsuite
testsuite_SOURCES=...
testsuite_CFLAGS=...
testsuite_LDADD=...
check-local:
./testsuite