22

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

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

ответ

21

Чтобы сделать пробный запуск, когда вы выдаете make check, вам нужно добавить их к TESTS переменной

Предполагая, что вы уже построили исполняемый файл, который запускает юнит-тесты, вы просто добавить имя исполняемого файла в ТЕСТЫ переменную так:

TESTS=my-test-executable 

затем он должен автоматически запускаться при make check, и если исполняемый файл возвращает ненулевое значение, то он сообщит, что в провале теста. Если у вас есть несколько исполняемых файлов модульных тестов, просто перечислить их все в переменной TESTS:

TESTS=my-first-test my-second-test my-third-test 

и все они будут получать бежать.

+1

вы также можете использовать переменную TESTS_ENVIRONMENT, если вам нужно настроить среду, в которой будут выполняться ваши тесты, например PATH. – tmatth 2010-03-18 18:41:39

4

Вы, кажется, задаете 2 вопроса в первом абзаце.

Первый заключается в добавлении тестов в инструментальную цепочку GNU autotools - но эти тесты, если я правильно вас понимаю, предназначены для проверки того, что среда, необходимая для создания вашего приложения, существует (зависимые библиотеки и инструменты), а также адаптировать сборку к окружающей среде (различия в конкретной платформе).

Во-вторых, о тестировании вашего приложения на C++ и о том, где вызывать эти тесты, вы предложили сделать это из цепочки инструментов autotools, предположительно из скрипта configure. Выполнение этого не является общепринятым, но ставить цель «тест» в Makefile - это более обычный способ выполнения вашего тестового набора. Типичные шаги для создания и установки приложения с помощью autotools (по крайней мере, с точки зрения пользователя, а не с вашего разработчика, перспектива) - это запустить скрипт configure, затем запустить make, а затем выполнить запуск теста и, наконец, выполнить установку.

Для второй проблемы, не требуя, чтобы cppunit был зависимым, почему бы просто не распространять его с вашим приложением на C++? Можете ли вы просто исправить это в любом архиве, который вы используете (будь то tar.gz, tar.bz2 или .zip) вместе с исходным кодом. Я использовал cppunit в прошлом и был доволен этим, используя JUnit и другие рамки стиля xUnit.

+0

любое представление вниз голосования? Считаете ли вы, что вопрос не был непосредственно рассмотрен? – 2008-09-25 18:52:44

8

Я использую Check 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 ([CHECK], [проверить> = 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 = @[email protected] 
    
  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 
    

Использование проверки вы можете использовать тайм-аут и поднять сигнал. это очень полезно.

0

Вы можете использовать Automake's TESTS для запуска программ, сгенерированных с помощью check_PROGRAMS, но это предполагает, что вы используете драйвер журнала и компилятор для вывода. Это, вероятно, проще по-прежнему использовать check_PROGRAMS, но чтобы вызвать набор тестов, используя локальное правило в Makefile:

check_PROGRAMS=testsuite 

testsuite_SOURCES=... 
testsuite_CFLAGS=... 
testsuite_LDADD=... 

check-local: 
    ./testsuite