У нас есть несколько регрессионных тестов в нашей части программного обеспечения, использующих инфраструктуру autotools (autoconf & automake). Эти регрессионные тесты разделяются между различными подкаталогами в соответствии с функциональными возможностями/единицами, которые они тестируют. Мы обнаружили, что, как только один из подкаталогов выходит из строя в любом тесте, последующие тесты в будущих подкаталогах не выполняются, и поэтому мы не получаем всю картину, какие функции продолжают работать, как ожидалось. Есть ли способ изменить это поведение и заставить выполнять все тесты, даже если есть некоторые тесты, которые не выполняются?Выполнение всех тестов в поддирерах, даже если некоторые сбой
Рассмотрим следующий минимальный пример, в котором сбой subdir1, а затем проверка make не переходит к subdir2. Выход (после генерации Configure через AUTORECONF -fiv и простой ./configure вызова) с помощью сделать чек является:
...
make[2]: Entering directory `x/subdir1'
make[3]: Entering directory `x/subdir1'
FAIL: fail
PASS: pass
make[4]: Entering directory `x/subdir1'
make[4]: Nothing to be done for `all'.
make[4]: Leaving directory `x/subdir1'
============================================================================
Testsuite summary for test 1.0
============================================================================
# TOTAL: 2
# PASS: 1
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
============================================================================
See subdir1/test-suite.log
============================================================================
make[3]: *** [test-suite.log] Error 1
make[3]: Leaving directory `x/subdir1'
make[2]: *** [check-TESTS] Error 2
make[2]: Leaving directory `x/subdir1'
make[1]: *** [check-am] Error 2
make[1]: Leaving directory `x/subdir1'
make: *** [check-recursive] Error 1
Файлы для этого Смаль теста:
configure.ac
AC_INIT([test], [1.0])
AM_INIT_AUTOMAKE()
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
subdir1/Makefile
subdir2/Makefile
])
AC_OUTPUT
subdir1/Makefile.am
check_PROGRAMS = fail pass
TESTS = fail pass
fail_SOURCES = fail.c
pass_SOURCES = pass.c
subdir2/Makefile.am
check_PROGRAMS = pass
TESTS = pass
pass_SOURCES = pass.c
и общие источники для fail.c и pass.c
pass.c
int main (void)
{ return 0; }
fail.c
int main (void)
{ return 1; }
Отлично! Я добавил параметр -k в переменную MAKEFLAGS в Makefile.am в корневом каталоге, который запускает все тесты, и он отлично работает! – Harald