Тестирование

Целесообразно начать лекцию с преобразования исходного текста — это шаг №0 репозитория с примером

О тестировании

Check

Check:

Check + autotools

Репозиторий с примером

Этапы разработки:

  1. Предварительные шаги
  2. Простой тест. Здесь и далее раннером работает shell-perl-… начинка ./test-driver, поставляемая с autotools.

  3. Тест переписан на libcheck.

  4. Тест ещё раз переписан на использование checkmk

  5. Авторские тесты удалены из основной прогарммы и переписаны на checkmk

    • Поскольку runner-ом у нас всё ещё работает ./test-driver, с его точки зрения это один тест, все подробности про внутренние suite и cases libcheck-а ему неизвестны.

    • TODO Возможно, стоит прикрутить к этому Test_Anything_Protocol, поддержка есть и в autotools, и в check

  6. Небольшая плюшка — просмотр журнала тестирования

    • Как минимум, CK_VERBOSITY=verbose make check и  grep "" *.log

TODO добавить фикстуру

Тестовое покрытие

Покрытие кода

Опять-таки тысячи их, посмотрим GCov

В тестовом репозитории:

  1. Поддержка gcov

    • в частности, просто make check; cd src; gcov -o .libs libnamegen (

    • libnamegen — это название базы, собранной при make check.

CMake / CTest / …

(Не успеем)

Meson / Gcovr

(Не успеем)

Д/З

  1. Изучить выбранный вами фреймворк тестов для Си
    • Например, check, autotools и пример из лекции

      • В ALT Linux понадобятся:
        • make, automake, autoconf

        • libtool

        • libcheck-devel, check

        • (кажется, всё?)
  2. Взять за основу Growable Memory Buffers for C99

    • Превратить в библиотеку
      • (!) Функция в ней всего одна, остальное макросы, и переделывать это не надо

      • Все макросы уезжают в .h-файл

    • Приложение-пример можно не писать

    • Тесты взять из авторского файла tests.c

      • Тесты на память с setjmp() можно выкинуть.

    • Оформить их сообразно правилам фреймворка в несколько отдельных тестов
      • <!> (необязательно) попробовать добиться как можно более полного покрытия (предельные тексты, например, с помощью prlimit)

    • Сделать примитивную поддержку проверки покрытия (чтобы проценты показывало)
  3. В репоизтории с домашними заданиями создать подкаталог 11_Testing и положить решение туда

LecturesCMC/LinuxApplicationDevelopment2022/11_Testing (последним исправлял пользователь FrBrGeorge 2022-11-29 19:49:34)