は、ここで私は私の最近のlibrariesの1のために使用さ.cabal
ファイルのフラグメントです。
...
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
キャブファイルには、ライブラリとテストスイートが定義されています。ライブラリは、エクスポートするモジュール、依存するパッケージ、およびいくつかのカスタムGHCオプションを設定します。
我々は簡単に配布するためのライブラリを構築し、パッケージ化することができます:テストスイートは、ライブラリーのようにたくさん見える
% cabal configure
% cabal build
% cabal sdist
:最初のオフ、それは最初Build-Depends
の行を参照してください(ライブラリとして同じ依存関係を持っています)、追加のテスト依存関係をいくつか追加します(2番目のBuild-Depends
行参照)。ここでのテストスイートは、HUnitテストとQuickCheckテストの組み合わせであり、Test-Frameworkをランナーとして使用します。 試験は、Test/ReferenceProps.hs
です。それはexitcode-stdio
タイプのテストです。これは、ReferenceProps
がコード0で終了した場合、キャバルはテストに合格すると言います。そうでない場合は、テストが失敗したと言います。
テストスイートはthisのように見える(しかし、ここでは、我々はリストの反転のためのいくつかの簡単なテストを使用するつもりだ):
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
はただのハーネスです。 mempty
の代わりにtest-framework
のさまざまなオプションを設定することもできます。関数testRev
はHUnitテストであり、propListRevRevId
はQuickCheckテストです。これらの書き込み方法については、relevantdocsを参照してください。
最後に、我々はテストを実行することができます:あなたはhttp://www.haskell.org/haskellwiki/How_to_write_a_Haskell_programを
% cabal configure --enable-tests
% cabal test
チェックアウトしましたか?あなたの質問のいくつかに答えるかもしれません。 –