Oto fragment pliku .cabal
użyłem jednego z moich ostatnich libraries.
...
Library
Build-depends: base >= 4 && < 5, bytestring, directory, filepath, hslogger,
SHA, zlib
Ghc-options: -Wall
Exposed-modules: Ltc.Store
Test-suite reference
Hs-Source-Dirs: Test, .
Main-Is: ReferenceProps.hs
Type: exitcode-stdio-1.0
Build-Depends: base >= 4 && < 5, bytestring, directory, filepath, hslogger,
SHA, zlib
Ghc-Options: -Wall
Build-Depends: test-framework, test-framework-hunit, test-framework-quickcheck2,
HUnit, QuickCheck
Jak widać plik cabal definiuje bibliotekę i zestaw testowy. Biblioteka definiuje eksportowane moduły, pakiety, od których zależy, i ustawia niestandardowe opcje GHC.
Możemy łatwo budować i pakować bibliotekę do dystrybucji z:
% cabal configure
% cabal build
% cabal sdist
testujące wygląda trochę jak biblioteki: po pierwsze, ma te same zależności jak biblioteka (patrz pierwszy Build-Depends
linię), a następnie dodaje pewne dodatkowe zależności testowe (patrz druga linia Build-Depends
). Testsuite jest kombinacją testów HUnit i QuickCheck, a jako runner używa Test-Framework. Właściwy test to . Jest to test typu exitcode-stdio
. Oznacza to, że cabal powie, że testy zakończą się, jeśli ReferenceProps
zakończy działanie z kodem 0. W przeciwnym razie powie, że testy się nie powiodły.
testsuite wygląda this (ale tu mamy zamiar użyć kilka prostych testów list odwrócenia):
import Data.Monoid
import Test.Framework
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2
import Test.HUnit
import Test.QuickCheck
main :: IO()
main = defaultMainWithOpts
[ testCase "rev" testRev
, testProperty "listRevRevId" propListRevRevId
] mempty
testRev :: Assertion
testRev = reverse [1, 2, 3] @?= [3, 2, 1]
propListRevRevId :: [Int] -> Property
propListRevRevId xs = not (null xs) ==> reverse (reverse xs) == xs
main
tylko uprząż. Możesz także ustawić różne opcje dla test-framework
, zastępując mempty
. Funkcja testRev
jest testem HUnit, a propListRevRevId
jest testem QuickCheck; patrz: relevantdocs w jaki sposób je zapisać.
Wreszcie możemy uruchomić testy:
% cabal configure --enable-tests
% cabal test
Czy odjazdu http://www.haskell.org/haskellwiki/How_to_write_a_Haskell_program? To może odpowiedzieć na niektóre z twoich pytań. –