http://martinfowler.com/bliki/Xunit.html

XUnitとは、今やソフトウェア開発者に広く知られるようになったテスティングフレームワークの総称である。最初に有名になったJUnitにちなんでその名がつけられている。

テスティングフレームワークの起源はSmalltalkである。 Kent Beckは、ソフトウェア開発の心臓部である自動テスティングの熱烈な愛好者だった。 彼は自分自身、そしてクライアントが、自動テスティングを行えるように、ユニットテストを構成したり実行したりするためのシンプルなフレームワークを作った。 このフレームワークの狙いは、通常のSmalltalk環境を使ったテストをプログラマが簡単に定義できるようにすること、そして、テストの一部または全てを迅速に実行できるようにすることだった。 Kentと彼のフォロワーたちは、Smalltalk IDEを使って編集とテストのサイクルを迅速に回すことで、システムを変更するたびにユニットテストを実行していた。

私がKentに出会ったのはその頃だった。 私もすでに同じようなことはやっていたのだが、Kentのフレームワークはウソのようにシンプルで、私が欲しい機能がピッタリそろった、絶妙な組み合わせの代物だった。 要するに、私よりも彼のほうがうまくやっていたわけで、私も彼のフレームワークを使うようになった。たとえば、C3でもこのフレームワークを使った。Ron Jeffriesもそこからそれを使うようになった。

先ほど「それ」といったが、実際には違う。 単一の kent-beck-smalltalk-unit-testing フレームワークは存在しないのだ。 Kentはみんなに環境をコントロールしてもらいたいと思っていたので、各チームには自分たちでフレームワークをビルドしてもらっていた(ビルドには数時間かかる)。 こうすることで、環境に合わせて自由に変更することができた——まさにSeedworkだったわけだ。

この時、Smalltalkコミュニティの外では、まだテスティングフレームワークは知られていなかった。そのため、JUnitがこのアイデアを広く広めたものとしてクレジットされている。 JUnitは、1997年にアトランタで開かれたOOPSLAに向かうチューリッヒ発の飛行機のなかで産声を上げた。 KentはErich Gammaと一緒だったが、2人のギークが長時間のフライトでやることといったら、それはプログラムしかないでしょう。 JUnitの最初のバージョンは、そこで、ペアプログラミングで、テストファーストで作られた(メタ循環的なのがギークっぽくてよいね)。 私はそれを聞いて、早速コピーをお願いし、最初のアルファユーザーになることができた。 気に入らないところは自由に変更することができたので、KentとErichにフィードバックを送ったりもした。 アサーションのメッセージがJavaの慣習のように引数の最後ではなく最初に置かれているのは誰のせいなんだと思っている人がいるかもしれないね……(遠い目)。

JUnitでは、レッド/グリーンのプログレスバーも導入した。 C3では、テストが失敗するとウィンドウ全体が赤に、すべてパスすれば緑になった。 統合時に中央のビルドマシンのウィンドウを見るのが簡単だったのだ。 JUnitはこれをプログレスバーとして採用した。 そして、新しい語彙をソフトウェア開発者にもたらした。

JUnitはロケットのように飛び立った——XPやTDDのムーブメントを支える必要不可欠な存在となった。 この10年でテスティングに対する姿勢が大きく変わったことを、私は目の当たりにしている。 それはJUnitの貢献であることが大きい。 小さくシンプルなことで、みんなが学びやすく使いやすかったわけだ。 ツールに統合して伝えれば影響を与えやすいということも分かった (SunにはすべてをまとめてJDKにバンドルして欲しいと思っている)。

JUnitが有名になれば、他の言語でも必要とされる。 Michael FeathersがC++用のCppUnitを作ったのを覚えている。 おそらくそれが他言語への最初の移植だったと思う。 それから多くの言語が追従し、今ではおそらくほぼすべての言語に、少なくとも1つ以上のJUnitポートが存在する。 いつか本物のフレームワークとしてSmalltalkに「移植」され直す日が来ることだろう。

移植されたものは様々である。 ターゲットの言語を考慮しながら、 オリジナルのJUnitを1行1行書き直しているものもある。 たとえば最初のバージョンのNUnitは、Visual Age for Javaの特別な処理である”isVAforJava”メソッドまで備えていた。 オリジナルより洗練されているものもある。 NUnit 2.0 では、C#のアトリビュートを使ったことをAnders Hejlsbergに称賛されている——このことはJavaコミュニティとJUnitにフィードバックされ、Javaはアノテーションを採用するに至った。

多くの移植が登場してきたことで、Ron JeffriesがxUnitのリストをWebサイトに掲載することにした。 今使っている言語のxUnitを探したいときは、ここを見るとよいだろう。 (RonはKentのSmalltalkパターンに関する論文も掲載している)