Как создать тесты для "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
  1. ./configure.ac

    PKG_CHECK_MODULES ([проверить], [проверить >= 0.9.10])

  2. ./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@
    
  3. и написать тестовый код,./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