Я боролся с Cabal большую часть дня, пытаясь заставить его функции автоматического тестирования работать с HUnit. Я прочитал документацию здесь и здесь, и у меня есть Раздел Test-Suite настроен так, как показано на рисунке, но всякий раз, когда я пытаюсь собрать пакет с использованием cabal build
, Кабал говорит, что поддерживается только тип Test-Suite exitcode-stdio-1.0
. Что дает?
Как использовать HUnit и Cabal для автоматического тестирования?
Ответы (2)
Задний план
Итак, дело в том, что документация на сайте клики - это «будущая документация», то есть еще не все эти функции реализованы и выпущены. Cabal-install 0.14.0 поставляется с интерфейсом detailed-0.9
, который является версией, отличной от того, что указано в документации (detailed-1.0
), но я еще не сталкивался с какими-либо проблемами, связанными с этим. Если у вас есть платформа Haskell версии 2011.4, которая поставляется с cabal-install 0.10.2, вы не сможете использовать интерфейс detailed-0.9
. Вам нужно будет перейти на платформу Haskell 2012.2, которая поставляется с cabal-install 0.14.0. Вы также можете просто обновить cabal-install отдельно, что я и сделал, потому что в Fedora 17 платформа Haskell находится только в версии 2011.4.
Установка
В документации здесь вы Посмотрим, как использовать detailed-0.9
интерфейс с QuickCheck. В нем упоминаются некоторые пакеты, которые имеют интерфейсы для HUnit, QuickCheck1 и QuickCheck2, но только пакет для QuickCheck2 доступен для взлома. Если вам нужны пакеты для остальных фреймворков, вам нужно использовать darcs (VCS), чтобы загрузить их с это место. Команда, которую вы хотите запустить для интерфейса HUnit, выглядит так: darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/
. Возможно, вам придется отрегулировать файл .cabal, чтобы заставить его собираться, в частности, он полагается на ghc 3.*
и cabal 1.10
. Я изменил это на свои версии (ghc 4.*
и cabal 1.14
), и все собрано нормально.
Тестирование
После того, как вы создали интерфейс, вам нужно сделать кое-что в своем тестовом модуле, чтобы Cabal мог его запустить. В частности, вам нужно будет импортировать как Distribution.TestSuite
, так и Distribution.TestSuite.HUnit
. После этого вам нужно будет преобразовать ваши тесты HUnit в тесты Cabal, используя функцию, предоставленную в интерфейсе HUnit. Вот соответствующие строки кода:
import qualified Distribution.TestSuite as Cabal
import qualified Distribution.TestSuite.HUnit as CabalHUnit
tests = map (\(x,y) -> CabalHUnit.test x y) [("Login tests", loginTests)]
Вот и все! Вы должны иметь возможность запустить cabal configure --enable-tests && cabal build && cabal test
и увидеть, как ваши модульные тесты проходят (или не проходят).
Изменить
Отредактировано, чтобы уточнить, что detailed-0.9
интерфейс включен в cabal-install 0.14.0, а не detailed-1.0
.
cabal --version
показывает 0.14.0
и 1.14.0
соответственно, но cabal configure --enable-tests
по-прежнему говорит, что типы тестов: exitcode-stdio-1.0, detail-0.9. Так что официальный 1.14.0
по-прежнему без detailed-1.0
.
- person nponeccop; 01.09.2012
exitcode-stdio-1.0
вместо detailed
. Вот рабочий пример, сочетающий exitcode-stdio-1.0
и HUnit
: gist.github.com/23Skidoo/8019225
- person Mikhail Glushenkov; 18.12.2013
Хотя ответ Двильсона хорош, detailed
в настоящее время не поддерживается. Вы можете интегрировать HUnit
с cabal
, используя exitcode-stdio-1.0
и Test.Framework
.
Он будет выводить все успешные и неудачные тесты в stdout
, а также отказываться от сборки, если тесты терпят неудачу. См. Мою суть.