モックとスタブの違い 一番良いのはどっちか?

結局一番良いのはどっちか?

これは自信を持って答えるのが難しい問いだと思う。個人的に私は状態中心のテスタを行ってきたが、これまでそれを変えようという理由が見当たらなかった。相互作用中心テストにも心がひきつけられるほどの利点は見当たらないし、私が関心があるのは実装にテストが結合することで起きる事についてなのだ。

相互作用中心のテストをお遊び以上にはどのテストでもやってみようとしないことの不利益というのも悩むところだ。[私が本を共著もした] テストドリブン開発自体から私が学んできたように、 真剣にやろうとしないでテクニックを判断しようと困ることはよくあることだ。私は相互作用中心テストを用いる人達をほんとうに多く知っているし、その人達はこのテクニックでとてもハッピーになれている優れた開発者達なのだ。

だからもし相互作用中心のテストがあなたの興味をそそるようなら、私は試しにやってみることをお勧めする。特に、相互作用中心テストが改善策になりうる幾つかの部分で問題を抱えているなら、試す価値はある。私は今、改善を見ることができる場所は主に2つあると思う。一つは、テスト失敗時に、テストが [問題の箇所で] はっきりと中断せず、問題がどこにあるかを伝えてくれないために、デバッグに多くの時間を費やしている時。(この問題の改善は適当な粒度のオブジェクトの集まりに対して状態中心テストをすることでもできるだろう)2つ目の部分は、もしオブジェクトが十分な振る舞いを備えていなかった時に、相互作用中心のテストはより振る舞いが豊かなオブジェクト [=必要な振る舞いを持つオブジェクト] を作成するように促す可能性だ。

もっと知るには

モックによる相互作用スタイルのテストについてより調べるのに、OOPLSA*12004で受理された素晴らしいOOPSLAの論文がある。残念なことにまだそれは会議前制限がかかっていてオンラインでない*2。テストテクニックについては jMock, nMock, EasyMock, .NET EasyMock といったツールのウェブサイトを見ることでも調べられる(他にもモックツールはあるので、このリストが完全なものとは思わないでほしい)。モック・オブジェクト・コミュニティはモックオブジェクトサイト*3をモックオブジェクトについての情報のポータルにしようとしているが、今のとこまだ整っていない。XP2000ではオリジナルのモックオブジェクトの論文があったが、これはやや古くなってしまった。

*1:Object-Oriented Progamming, Systems, Laguages & Applications http://www.oopsla.org/

*2:この記事が書かれたのは2004年7月

*3:MockObjectsのWiki(更新が止まっている):http://www.mockobjects.com/FrontPage.html