Тестирование
- модульное → системное → (интеграционное) → приёмочное
Модульное: тысячи их
Модульное, XUnit
- Runner
- Assertion
- Test → case → suite
- Fixture
- Coverage
- Системное и далее — слишком много методологий
- CI — не рассматриваем, хотя, возможно, стоило бы
Check
- ЯП — C
Поддержка TAP и др.
- Поддержка pkgconfig (⇒ autotools, cmake и т. п.)
Check + autotools
За основу взят https://github.com/skeeto/fantasyname/tree/master/c
- Некоторые этапы
Сборка библиотеки и программы-примера из каталога src
тест с использованием check (программа на Си, содержит ошибку, но работает ☺)
тест переписан на checkmk (входит в состав check)
Тестовое покрытие
Опять-таки тысячи их, посмотрим gcov (встроен в gcc!)
CMake / CTest / …
(Не успеем)
CMake: add_tests
CMake + check: CMake + check
CMAke + CTest: короткая статья, в документации, руководство
CMake + CTeat + coverage: в документации, в руководстве по CTest
Д/З
- Изучить выбранный вами фреймворк тестов для Си
Например, check, autotools и пример из лекции
- В ALT Linux понадобятся:
make, automake, autoconf
libtool
libcheck-devel, check
- (кажется, всё?)
- В ALT Linux понадобятся:
Взять за основу Growable Memory Buffers for C99
- Превратить в библиотеку
Функция в ней всего одна, остальное макросы, и переделывать это не надо
Все макросы уезжают в .h-файл
Приложение-пример можно не писать
Тесты взять из авторского файла tests.c
Тесты на память с setjmp() можно выкинуть.
- Оформить их сообразно правилам фреймворка в несколько отдельных тестов
(необязательно) попробовать добиться как можно более полного покрытия (например, с помощью prlimit)
- Сделать примитивную поддержку проверки покрытия
- Превратить в библиотеку
В репоизтории с домашними заданиями создать подкаталог 08_TestingCoverage и положить решение туда