Haksellで単体テストを書きたいと思い調べていたのですが  
・Hunit  
・QuickCheck  
・test-framework(HunitとQuickCheckが含まれる？)  
・Hspec  
と複数見つかりどれを使用するのがいいのかわかりませんでした。  
これらは状況によって使い分けるものなのでしょうか  
それとも、とりあえずこれを覚えとけばいい。  
というものがあるのでしょうか

また、テストを書くにあたって学習になるサイト  
もしくは書籍あれば教えていただけるとありがたいです
CC BY-SA 3.0
2015-04-10T16:02:50.377
9028
2015-05-07T14:43:33.020
7793
question
haskell
Haskellの単体テストの選び方
※私自身はHaskellを普段使いしてるわけではないです。より詳しい回答までのつなぎ程度に。。

HUnitはJUnitが、HSpecはRSpecが元になっていますし、同様のフレームワークは多くの言語に存在しますから、使い分けはそのあたりが参考になるかと思います。Wikipediaにも[xUnitの一覧](http://ja.wikipedia.org/wiki/XUnit#xUnit.E3.81.AE.E4.B8.80.E8.A6.A7)や[xSpecの一覧](http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%98%E3%82%A4%E3%83%93%E3%82%A2%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA#.E5.A4.96.E9.83.A8.E3.83.AA.E3.83.B3.E3.82.AF)が載っていますね。

大きな違いはテストケースの書き方です。xSpecのベースになっているBDDという考え方では、テスト対象の振る舞いや要求仕様を表すようなテストコードを書くことになるので、関連するフレームワークでもそういった記述がしやすくなっています。

[いまさら聞けないTDD/BDD超入門（2）：TDD／BDDの思想とテスティングフレームワークの関係を整理しよう (1/3) -
＠IT](http://www.atmarkit.co.jp/ait/articles/1403/25/news033.html)

これらのフレームワークではテストデータを自分で用意することが多いです。しかし、どんな引数を与えても満たされるべき性質がある場合、個別にテストデータを用意するのは面倒です。そこでQuickCheckでは、型を元にランダムな値を生成してテストを実行します。

[少しはテストを楽しくやる(QuickCheck) -
yunomuのブログ](http://yunomu.hatenablog.jp/entry/2012/12/11/230424)

test-
frameworkはHUnitやQuickCheckでかかれたテストをまとめて実行し、レポートを生成するものなので、単体でxUnitやxSpecのような機能を持つわけではありません。

で結局Haskellでの単体テストはどうするの、という話はこの記事が参考になるかと。初出は2012年ですが、現在もメンテされているようです。

[Haskellの単体テスト最前線](https://github.com/kazu-yamamoto/unit-test-
example/blob/master/markdown/ja/tutorial.md)
CC BY-SA 3.0
2015-04-11T09:43:43.870
9048
2015-04-11T09:43:43.870
8000
9028
answer
最近のライブラリのコードを読んでいると、だいたい[Tasty](https://github.com/feuerbach/tasty)か[Hspec](http://hspec.github.io/)が使われています。Tastyはメンテされなくなってしまったtest-
frameworkの後釜です。

二つの使い分けは…好みの問題かもしれません。僕はHspecが読みやすくて好きです。

TastyもHspecもサンプルコードが用意されているので、いじってみるのが良いと思います。
CC BY-SA 3.0
2015-05-07T14:43:33.020
9911
2015-05-07T14:43:33.020
3453
9028
answer