Подтвердить что ты не робот

Как вы создаете тесты для "make check" с помощью GNU autotools

Я использую GNU autotools для системы сборки для конкретного проекта. Я хочу начать писать автоматические тесты для проверки. Я хотел бы просто набрать "make check", чтобы он автоматически запускал их. Мой проект находится на С++, хотя мне все еще интересно писать автоматические тесты для других языков.

Является ли это совместимым с почти всеми модулями тестирования модулей там (я думал об использовании cppunit)? Как я могу подключить эти модульные модули тестирования для проверки? Могу ли я удостовериться, что я не требую установки программного обеспечения unit test для настройки и создания остальной части проекта?

4b9b3361

Ответ 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