Ответ 1
Получение модульного тестирования, охвата кода и контрольных показателей в основном связано с выбором правильных инструментов.
- test-framework предоставляет универсальный магазин для запуска всех ваших тестовых примеров HUnit и QuickCheck свойства все из одной упряжи.
- Покрытие кода встроено в GHC в виде инструмента HPC.
- Критерий предоставляет некоторые довольно большие бенчмаркинга.
Я буду использовать в качестве примера пример пакета, который я только начал включать с модульным тестированием, охватом кода и эталонами:
http://github.com/ekmett/speculation
Вы можете интегрировать свои тесты и тесты непосредственно в свой файл cabal, добавляя для них разделы и маскируя их за флагами, чтобы они не делали так, чтобы каждый пользователь вашей библиотеки имел доступ (и хотел используйте для себя) точную версию инструментов тестирования, которые вы выбрали.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Затем вы можете сказать кабалу о том, как запустить тестовый пакет. Поскольку тест кабала еще не существует - у нас есть студент, который работает над этим летом этого года! - лучший механизм, который у нас есть, - это. Вот как использовать механизм крюка пользователя cabal. Это означает переход на "Custom" сборку с помощью cabal и создание testHook. Пример testHook, который запускает тестовую программу, написанную с помощью тестовой среды, а затем применяет hpc к профилю, можно найти здесь:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
И затем вы можете использовать тестовую инфраструктуру для объединения тестов QuickCheck и HUnit в одну программу:
http://github.com/ekmett/speculation/blob/master/Test.hs
В кэшированном файле обязательно включить -fhpc, чтобы включить тестирование покрытия кода, а затем testHook в Setup.lhs вручную запускает hpc и записывает свой вывод в ваш каталог dist.
Для бенчмаркинга история немного более ручная, нет опциона "cabal benchmark". Вы можете связать свои тесты с тестовым кликом, но мне нравится запускать их вручную, так как Criterion имеет так много графических параметров отчетности. Вы можете добавить свои тесты в файл cabal, как показано выше, дать им отдельные флаги компиляции, скрыть их за флаг cabal, а затем использовать Criterion для выполнения всего тяжелого подъема:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Затем вы можете запустить свои тесты из командной строки и получить всплывающие окна KDE с результатами тестов и т.д.
Так как на практике вы живете в кабале в любом случае при разработке кода Haskell, имеет смысл интегрировать вашу инструментальную цепочку с ней.
Изменить. Поддержка тестирования Cabal теперь существует. См. http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites