Ответ 1
По сути, существует четыре подхода: писать тесты, записывать исполняемые файлы, экспериментировать с REPL (GHCI) и записывать тесты. К счастью, последняя версия Cabal (1.18) поддерживает их все. Также для справки у меня есть проект, который показывает некоторые.
Испытания
Вероятно, лучший подход, когда у вас есть какая-то функция, которую вам нужно протестировать, - написать блок-тест. Накопление тестов с ростом вашего проекта является ключом к его надежности.
Существуют три основные структуры: HUnit для модульного тестирования, QuickCheck для тестирования свойств и doctest для тестирования примеров из комментариев к документу. Существуют также купольные рамки, такие как HTF, который объединяет HUnit и QuickCheck и освобождает вас от некоторых из их шаблонов.
В Cabal вы можете определить тестовые пакеты как отдельные единицы компиляции с их собственными настройками. Вот пример. Затем вы можете запустить их с помощью cabal test
.
Исполняемые
Есть случаи, когда тестирование действительно не соответствует требованиям. Стандартный случай - это программа, которая демонстрирует, как должна использоваться библиотека. Вот пример.
Вы также можете использовать исполняемые файлы как песочницы для тестирования API-интерфейсов вашей библиотеки, но опять же, более разумный подход заключается в написании тестов.
Вы можете запускать исполняемые файлы с помощью cabal run [name]
, где "name" указывает исполняемое имя, если есть необходимость устранить неоднозначность (т.е. когда у вас более одного).
REPL (GHCI)
Основное преимущество заключается в том, что вы можете экспериментировать с API-интерфейсами ваших проектных модулей в режиме "живого", когда вы загружаете внутренние модули, запускаете их функции и загружаете их на обновления. Это может быть полезно для анализа API, но я лично считаю, что два подхода выше охватывают большинство из того, что мне может понадобиться.
Вы можете запустить GHCI в своем проекте с помощью cabal repl [name]
.
Бенчмарки
Критерий является единой доминирующей библиотекой для бенчмаркинга. Как и выше, вы можете объявить свои тестовые исполняемые файлы в cabal с помощью блока benchmark [name]
. Затем вы можете запустить их с помощью cabal bench
.