回答:
単体テスト、コードカバレッジ、およびベンチマークを正しく取得するには、主に適切なツールを選択する必要があります。
単体テスト、コードカバレッジ、ベンチマークで有効にしたばかりのパッケージを実行例として使用します。
http://github.com/ekmett/speculation
セクションを追加し、フラグの背後にマスクしてテストとベンチマークを直接cabalファイルに統合して、ライブラリのすべてのユーザーがアクセスできるように(そして自分自身で使用したい)ようにすることができます。 )選択したテストツールの正確なバージョン。
http://github.com/ekmett/speculation/blob/master/speculation.cabal
次に、テストスイートの実行方法をcabalに伝えることができます。カバールテストはまだ存在しないので、今年の夏のコードのためにテストしている学生がいます!-私たちが持っている最高のメカニズムは、 cabalのユーザーフックメカニズムの使用方法です。これは、cabalを使用して「カスタム」ビルドに切り替え、testHookを設定することを意味します。test-frameworkで記述されたテストプログラムを実行し、hpcをプロファイルに適用するtestHookの例は、次の場所にあります。
http://github.com/ekmett/speculation/blob/master/Setup.lhs
そして、テストフレームワークを使用して、QuickCheckテストとHUnitテストを1つのプログラムにバンドルできます。
http://github.com/ekmett/speculation/blob/master/Test.hs
そこのcabalファイルは、コードカバレッジテストを有効にするために-fhpcをオンにするように注意しており、次にSetup.lhsのtestHookが手動でhpcを実行し、その出力をdist dirに書き込みます。
ベンチマークについては、ストーリーはもう少しマニュアルであり、「カバルベンチマーク」オプションはありません。ベンチマークをテストフックに接続することもできますが、Criterionには非常に多くのグラフィカルレポートオプションがあるため、手動で実行するのが好きです。上記のように、ベンチマークをcabalファイルに追加し、個別のコンパイルフラグを付け、それらをcabalフラグの後ろに隠し、Criterionを使用してすべての重い作業を行うことができます。
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
その後、コマンドラインからベンチマークを実行し、ベンチマーク結果などを含むポップアップKDEウィンドウを取得できます。
実際にはHaskellコードの開発中はとにかくcabalに住んでいるので、ツールチェーンをそれと統合することは非常に理にかなっています。
編集:Cabalテストのサポートが存在します。http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suitesを参照してください
cabal test
及びcabal bench
、混合HUnit
、doctest
およびquickcheck
用いた試験に基づくcriterion
ベンチマークを。speculation
predates cabal test
およびのコードcabal bench
。
このアプローチはRWH ch 11で提唱されており、XMonadではおおよそ次のとおりです。
QuickCheckを介して主要な不変条件が確立されたら、リファクタリングを開始し、それらのテストを型不変条件に移動できます。
あなたの努力をサポートするための実践:
テスト・フレームワークパッケージは本当に素晴らしいです。HUnitテストとQuickCheckテストを簡単に統合し、コマンドラインフラグに基づいて、指定されたスイートのみを実行する実行可能ファイルを複数の出力ターゲットで取得できます。
ただし、テストとプロファイリングは別の動物です。プロファイリングでは、プロファイリングするセクションのみに重点を置き、ビルドと実行のプロファイリングの結果を注意深く見ている別の実行可能ファイルをセットアップします(コンパイルには-prof-auto-allを、ランタイムには+ RTS -pを使用します)。国旗)。
テストでは、HUnitプロパティとQuickCheckプロパティを使用し、Haskell Test Frameworkを使用してすべてのユニットテストとすべてのQuickCheckプロパティを自動的に収集します。
免責事項:私はHaskell Test Frameworkの主な開発者です。
cabal bench
今も存在しています。