1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-incubator-guacamole-server

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-unit-testing.md 4.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 00:22 a1db7db

Модульное тестирование и guacamole-server

Модульные тесты в guacamome-server реализованы с использованием следующих инструментов:

  • automake, который позволяет объявлять произвольные тесты внутри Makefile.am и использует make check для запуска этих тестов;
  • CUnit (libcunit), фреймворк для модульного тестирования;
  • util/generate-test-runner.pl, скрипт на языке Perl, который генерирует тестовый раннер на языке C, использующий CUnit, и запускает модульные тесты, объявленные в каждом из указанных файлов .c. Сгенерированный тестовый раннер выдаёт вывод в формате TAP (https://testanything.org/), который используется тестовым драйвером TAP, предоставляемым automake.

Написание модульных тестов

Все модульные тесты должны быть в достаточно изолированных исходных файлах на языке C. Каждый логический тест должен иметь свою функцию вида:

void test_SUITENAME__TESTNAME() {
    ...
}

где TESTNAME — произвольное имя теста, а SUITENAME — произвольное название набора тестов, к которому принадлежит этот тест.

Это соглашение об именах требуется для generate-test-runner.pl. Абсолютно все тесты ДОЛЖНЫ следовать этому соглашению, чтобы они были подобраны и организованы скриптом генерации тестового раннера. Функции, которые не являются тестами, НЕ ДОЛЖНЫ соответствовать этому соглашению, чтобы их случайно не подобрали как тесты.

Makefile.am для подпроекта, содержащего такие тесты, обычно модифицируется, чтобы содержать разделы, подобные следующим:

#
# Модульные тесты для myproj
#

check_PROGRAMS = test_myproj
TESTS = $(check_PROGRAMS)

test_myproj_SOURCES =      \
    ...все исходные файлы...

test_myproj_CFLAGS =        \
    -Werror -Wall -pedantic \
    ...другие флаги...

test_myproj_LDADD = \
    ...библиотеки...

#
# Автогенерация тестового раннера
#

GEN_RUNNER = $(top_srcdir)/util/generate-test-runner.pl
CLEANFILES = _generated_runner.c

_generated_runner.c: $(test_myproj_SOURCES)
	$(AM_V_GEN) $(GEN_RUNNER) $(test_myproj_SOURCES) > $@

nodist_test_libguac_SOURCES = \
    _generated_runner.c

# Использование тестового драйвера automake для запуска любых тестов
LOG_DRIVER =                \
    env AM_TAP_AWK='$(AWK)' \
    $(SHELL) $(top_srcdir)/build-aux/tap-driver.sh

Вышеуказанное объявляет ...

  • ... что двоичный файл test_myproj должен быть собран из указанных источников. Обратите внимание, что test_myproj_SOURCES содержит только исходный код, написанный вручную, в то время как nodist_test_myproj_SOURCES содержит только код, сгенерированный generate-test-runner.pl.
  • ... что этот двоичный файл test_myproj следует запускать для тестирования этого проекта при запуске make check, и что для обработки его вывода следует использовать тестовый драйвер TAP от automake.
  • ... что исходный файл _generated_runner.c генерируется динамически (через запуск generate-test-runner.pl на всех не сгенерированных источниках тестов) и не должен распространяться как часть исходного архива.

При наличии тестов, соответствующих вышеуказанному соглашению об именах, и внесении необходимых изменений в соответствующий Makefile.am, все тесты будут автоматически запускаться при запуске make check.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-incubator-guacamole-server.git
git@api.gitlife.ru:oschina-mirror/mirrors-incubator-guacamole-server.git
oschina-mirror
mirrors-incubator-guacamole-server
mirrors-incubator-guacamole-server
main