hnwの日記

第4回Symfony2勉強会でLT発表してきました

去る6月4日、第4回Symfony2勉強会でLT発表してきました。以下が発表資料です。


僕だけSymfony2と何の関係があるの?という感じのタイトルでしたが、案外好評だったように思います。懇親会でも何人かに声をかけて頂いて、このあたりの話題は結構ニーズがあるんだなーと感じました。


スタブとモックの違いについては伝えるのが難しいかと思っていたのですが、伝わったよ、と言ってくれた人がいて、安心しました。ちなみに本文中で触れているMatrin Fowlerのブログ記事は下記です。


発表中、Martin Fowlerはモックによるテストに懐疑的なようだ、という話を紹介しました。もう少し詳しく紹介すると、モックで「ふるまい」のテストを書くためには、どう実装するか(=メソッドがどういう順序で何回呼ばれるか)を知っている必要があるはずだ、これは非常に不自然に感じる、と上記の記事に書いています。


これは僕も非常に納得できます。実は、僕のケースで言うと実装後にテストを書いていたのですが*1、モックでのテストを書くために実装を見て呼ばれているメソッドを調べる、という意味不明なことをしていました。実装後であっても、どのメソッドが呼ばれているかスラスラ答えるのは簡単ではありません。テストファーストでテストを書くような場合を想像すると、呼び出されるメソッドを完全に記述するのは非常に難しいように思います。


一方で、モックが役に立つ状況もあるはずです。たとえば、認証メソッドがfalseを返したら他のメソッドが呼ばれるはずがない、のように、メソッドの呼び出しに関して実装前から断言できることもあるでしょう。また、Martin Fowlerも書いているように、呼び出し関係が複雑すぎる状況ではどこでエラーが起きたかわかりにくいことがあるので、モックでのチェックが活躍する状況もあると思います。


まだ僕自身も全然わかっていないので、お前勘違いしてるぞ、などあれば教えてください。

*1:モックを体験してみるのが目的だった部分が大きいので、あまりツッコまないでください