【ソフトウェアテスト】xUnit と Spec系の比較

テスティングフレームワークについてググっていたら、どうやら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系のほうが後から作られただけあって、下記のメリットがありそう。

  1. BDDのツールなので、ユーザ視点で表現する。プログラマ以外の人と仕様をすり合わせしやすい。
  2. 決まり切ったコード(Boilerplate code)を減らせる

とはいえ。システムテスト・受入テストについていえば1のメリットはありそうだが、単体テスト結合テストは開発者が行うテストなので、あまり関係ないかも。

2についていえば、概ね一般論として xUnit より有利、と言えるかもしれないが、実際には各ツールの出来に依存するのではないか?

なので、出来れば両方使ってみて使いやすいほうを使う、というのが正解な気がする。