テスティングフレームワークについてググっていたら、どうやら2系統にわかれるっぽい。
xUnit
SUnit(Smalltalk) に始まり、JUnit(Java)、GoogleTest(C++)、HUnit(Haskell), ScalaTest(Scala), ExUnt(Elixir) など。
自分は今までこちらしか使ったことがなかった。
Spec系
RSpec(Ruby), JGiven(Java), Igloo(C++) , HSpec(Haskell), Spec2(Scala) ,ESpec(Elixir)など。
テストケースの記述にフォーマットが決まっている。given/when/then
どちらを選ぶ?
メジャーな言語は両方の系統を持っていることも多い。Spec系のほうが後から作られただけあって、下記のメリットがありそう。
- BDDのツールなので、ユーザ視点で表現する。プログラマ以外の人と仕様をすり合わせしやすい。
- 決まり切ったコード(Boilerplate code)を減らせる
とはいえ。システムテスト・受入テストについていえば1のメリットはありそうだが、単体テスト・結合テストは開発者が行うテストなので、あまり関係ないかも。
2についていえば、概ね一般論として xUnit より有利、と言えるかもしれないが、実際には各ツールの出来に依存するのではないか?
なので、出来れば両方使ってみて使いやすいほうを使う、というのが正解な気がする。