2012-08-08 20 views
14

私はカバールとの間で、HUnitとの自動テスト機能を有効にしようとしています。私はドキュメントherehereを読んだことがありますが、Test-Suiteセクションが表示されているようにセットアップされていますが、いつでも使用しようとすると、パッケージを作成しようとします。cabal build Cabalはサポートされている唯一のTest-Suiteタイプがexitcode-stdio-1.0だと言います。何がありますか?HUnitとCabalを使って自動テストを行うには?

答えて

17

背景

は、だからここの契約だが、徒党サイト上の文書ではなく、これらの機能のすべてが実装されており、まだリリースされている「将来のドキュメント、」です。 Cabal-install 0.14.0には、detailed-0.9インターフェイスが付属しています。これは、ドキュメント(detailed-1.0)で指定されているバージョンの背後にあるバージョンですが、まだこれに関連する問題は発生していません。 cabal-install 0.10.2に付属のHaskell Platform version 2011.4をお持ちの場合、detailed-0.9インターフェイスを使用することはできません。 cabal-install 0.14.0に付属のHaskell Platform 2012.2にアップグレードする必要があります。 cabal-installを別途アップグレードすることもできます。これは、Fedora 17ではHaskell Platformが2011.4にしかないため、私が行ったことです。

ドキュメントhereでインストール

あなたはQuickCheckでdetailed-0.9インタフェースを使用する方法の例が表示されます。 HUnit、QuickCheck1、およびQuickCheck2へのインタフェースを持ついくつかのパッケージについて言及していますが、QuickCheck2用のパッケージのみがハッキングで利用可能です。パッケージの残りのフレームワークを使用するには、thisの場所からdarcs(VCS)をダウンロードする必要があります。 HUnitインターフェース用に実行するコマンドは、darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/です。 .cabalファイルをビルドするには、調整する必要があります。具体的には、​​とcabal 1.10に依存します。これを私のバージョン(ghc 4.*cabal 1.14)に変更し、うまく構築しました。

テスト

あなたは陰謀団がそれを実行できるように、テストモジュールにいくつかのものを行う必要が構築されたインターフェースを持っていたら。具体的には、Distribution.TestSuiteDistribution.TestSuite.HUnitの両方をインポートする必要があります。その後、あなたはHUnitインタフェースで提供される機能を使用して、陰謀団のテストにご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インターフェースが徒党インストール0.14.0ではなく、detailed-1.0に含まれていることを明確にする編集
編集。

+0

解決策は、HP 2012.2では機能しません。 '徒党--version'ショー' 0.14.0'それぞれ '1.14.0'が、'徒党のconfigure --enable-tests'はまだ "テストの種類は次のとおりです。終了コード-stdioの-1.0、詳細な-0.9" と言います。だから、公式 '1.14.0'は'詳細な-1.0'ずにまだあります。 – nponeccop

+0

@nponeccop私のソリューションは誤解を招いて申し訳ありません。私はそれをもっと明確に編集しました。明らかにするには、 "detailed-1.0"インターフェースはまだ出ていないので、 "detailed-0.9"インターフェースを使用する必要があります。 1.0インタフェースではなく、0.9インタフェースでなければならないことは、これまでのところ発生していませんが、YMMVです。 – Dwilson

+3

Google検索でここに到着する人には:もっと簡単な解決策は 'detailed'の代わりに' exitcode-stdio-1.0'テストタイプを使うことです。 'exitcode-stdio-1.0'と' HUnit'を組み合わせた実例があります:https://gist.github.com/23Skidoo/8019225 –

1

Dwilsonの答えは良いですが、detailedは、現在もサポートされていません。 HUnitcabalexitcode-stdio-1.0Test.Frameworkを使用して重ねることができます。

これは、出力のすべての成功意志とstdoutにテストを失敗しただけでなく、テストが失敗した場合の構築に失敗。私のgistを参照してください。

関連する問題