単体テスト書いていて、モックオブジェクトを使いたい場面に遭遇した。
NUNnit から VS2008Pro標準搭載の MSTest へ転向してからは初めて。
ということで、念のためと思い、Google で下調べしてみた。
下記ブログページを発見し、いろいろとプロダクトあるのだな、と勉強。
.NET のメモ - Mockツール
http://pub.ne.jp/1691/?entry_id=393410
はて、
Google の検索結果を見てみると、「
ASP.NET MVC ソース 更新 プレビュー - ScottGuさんのブログ翻訳」が検索結果に現れていた。
これらのテストはMSTestとオープンソースのMoq モックフレームワークを使用して実装されています。
Moq って何?
再度 Google 検索してみると、Google Code にありました。
Moq - Google Code
http://code.google.com/p/moq/
このプロダクトが興味深かったのは、"Strong-typed" である、ということ。"no strings for expectations"、文字列では記述せずに、じゃぁどうやるかというと、ラムダ式でやるそうだ。
実際に使ってみたが、参照設定に加えるだけで簡単に使うことができた。
マニュアルとかあまりよく読まなかったが、簡単な使い方なら、上記 Google Code のページのトップに掲載されているサンプルコード(?)から容易に察しがついた。
ラムダ式で記述するのは、インテリセンスの支援が受けられることもあり、なかなか便利で、コンパイルチェックされるから書き間違いもない。動的言語もスキだけど、"Strong-typed" もこういう場面ではやはりありがたい。
C# 3.0 の話題が出始めた当初、ラムダ式なんて、匿名デリゲートの糖衣構文? としかわからなかったが、ラムダ式が匿名デリゲートと決定的に違うのは、ラムダ式は expression-tree を持っている、ということなのだな。
だからこそ、Moq のようなラムダ式の使い方ができるのだろう。
ほかのモックフレームワークもなかなか捨てがたいが、いまのところは Moq がおもしろくてイチオシだ。