Как вы создаете тесты для "make check" с помощью GNU autotools - PullRequest
24 голосов
/ 25 сентября 2008

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

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

Ответы [ 4 ]

24 голосов
/ 06 октября 2008

Чтобы запустить тест при вводе make check, необходимо добавить их в переменную TESTS

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

TESTS=my-test-executable

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

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

и они все побегут.

9 голосов
/ 29 ноября 2013

Я использую Проверка 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], [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 = @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
    

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

4 голосов
/ 25 сентября 2008

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

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

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

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

0 голосов
/ 20 октября 2017

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

check_PROGRAMS=testsuite

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

check-local:
    ./testsuite
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...