モックとスタブと僕の悟り体験

最近モナド継続に続く第三の悟りを体験した。それが「モックとスタブの違い」

自分の言葉で表すとすれば、

テスト関心空間の内側にあるのがモックで外側がスタブ

といったところか。

発端はPython Testing: Beginnerでmockerを使っていたのだけど、verifyメソッドの存在意義がよく分からなかった(モックとスタブの違いを理解した今なら、verify必要に決まってんじゃんと言えるわけだが)。

ProductName Python Testing: Beginner's Guide
Daniel Arbuckle
Packt Publishing / 3220円 ( 2010-01-31 )


悟りに至るまでにいくつかのサイトを読んだ。

スタブに関しては割りと容易に理解できる。モックとスタブの違いなんかに書いてあるように要するにスタブアウトですね。外界とのインタラクションを絶ち切って(debouple)状態にテストの関心を集中するわけだ。

で、問題はモック。Mock と Stub についてによると

Mock と Stub の違いはテストの観点の違いです。相互作用(振る舞い)中心のテストに利用するのがMockで、状態中心のテストに利用するのがStubです。

これだけだとわからないが、次のパラグラフを読むと

相互作用中心のテストとはテスト対象のシステムと外部のコンポーネントとの間で正しいやり取りがされるかのテスト、いわばプロトコルのテストです。外部のコンポーネントは Mock により置き換えられ、システムから正しい呼び出しがなされているかを監視します。

この文章でモックが何をデカップリングしようとするのかがおぼろげながら見えてきます。

したがって、例えばWebアプリの Controller の単体テストにおいて相互作用中心のテストが正しく行われてパスしているならば、Model が正しく実装された時に Controller が正しく動作するということが、Model が実装されなくても保障されます。

つまり、モックオブジェクトが期待されたとおり過不足なく呼び出されているかを調べるverifyはモックのテストにおいては重要な機能なわけだ。

実際にモックのテストを見ていると、内部の動作知ってないとテストかけないじゃんと思うんだけど、それはモックが必要な場面、モックが有効な場面に書いてあった。

でも、話を聞く限りだとモックというのはテスト対象の実装の中の処理の流れを追う物のようなので、それじゃブラックボックステストにならないじゃないかと思った。それをそのまま言ったら、確かにテストはできるだけブラックボックステストになってた方がいいけど、機能テストやインテグレーションテストのような粒度の大きな単位のテストでは、処理の中で起こる様々な出来事や副作用を色々モニタリングして、すべての処理が期待通りに動いているかどうかを検証しないといけないから、必然的にホワイトボックステストにならざるを得ないと言われた。

僕の場合はここまで読んだら、あーモックとスタブの違いってそういうことなのか!となったので参考になればと思い、メモっておく。

だ、だ、だんごむしー(コロッコロッ)

久しぶりにジムに行ってガツッと走って帰ってきたら、娘と息子が待ち構えていてダンゴムシ探しに付き合わされた。

1332070449

紫陽花の芽が。春ですな。

1332070446

ダンゴムシを二匹ゲット。

1332070447

虫かごに入れてお持ち帰り(後で逃がす)。

1332070453

ProductName ぼく、だんごむし (かがくのとも傑作集 どきどき・しぜん)
得田 之久
福音館書店 / 945円 ( 2005-04-15 )


部屋のレイアウトを変えた

娘が小学生になるので、机をリビングに持ってきて、いろいろレイアウトを変更した。

1332032066

そのせいで、ノートブックをだらだらいじるという自分の居場所が無くなってしまった。特に電源をどこに用意するか悩んでいる。

1332031645

新しいiPod nano

初代がリコール対象だってことを教えてもらったので、早速修理に出したら8GのiPod nanoになって戻ってきた

ProductName Apple iPod nano 8GB シルバー MC525J/A

アップル / 8331円 ( 2010-09-02 )


Pros.

フィットネスっていう機能がついてた。これを買えばいいのか

ProductName Apple Nike + iPod Sensor MA368J/E

アップル / 2004円 ( 2010-08-03 )


Cons.

ホイールが無いので運転中は操作しにくい。

まとめ

暖かくなってきたのでそろそろジムを退会しようかと思っている。 家の周りを走るのになんかいいアプリないかな

AndroidだとJogTrackerになるのかな?

ポケモン+ノブナガの野望

息子が「あそんでみたいねー」って言うので、「いいねー!でもパパお金ないよ?」って言っておいた。

こっちでもいいような気もするが

レンズが欲しい

本を買うのを2ヶ月ほど自粛すればこのレンズが買える。

が、こっちのほうが欲しいかもしれん。

写真はフィクション

先日ボードトリップにいった帰りの車のなかで、@logicraft

写真っていうのは撮るときには構図が既に頭の中にあってですな、シャッターを押すっていうのは単に切り取るだけであって云々

と熱く語っているのを、ふーんそんなもんなのかと聞いていたのだけど、その後にちょうどはじめての編集を読んだら、

写真っていうのは自分の主観に基づいて主題を決めてストーリーをつくるんだから、結局フィクションじゃないか!と腑に落ちた。写真って面白そう!って思ったので少し撮れるように勉強してみるかと。

ProductName デジカメ写真の構図が上手くなる見本帳
石田 徳幸
翔泳社 / 1764円 ( 2012-01-18 )


DJingも似たようなもんですね。主題を決めて曲を自分なりに解釈してストーリーとして編集し直す、その過程が楽しい。

ProductName DJ選曲術―何を考えながらDJは曲を選び、そしてつないでいるのか?
沖野 修也
リットーミュージック / 1260円 ( 2005-10 )


パズリカ

適当に読んで面白そうなパズルを解く

ProductName パズリカ
伴田 良輔
小学館 / 1575円 ( 2009-09-11 )


個人的には論理パズルのほうが好みだな。

リアルタイムメディアが動かす社会

すがやみつるさん、八木啓代さん、渋井哲也さんの話が面白かった。

編集とは企画を立て、人を集め、モノをつくるために、 言葉とイメージとデザインをアンサンブルすること

本(文章)の編集の話かなぁと思いながら読み始めたら全然違っていて良い意味で期待を裏切られた。「はじめての編集」は良書だと思いますね。

デザインにちょっとでも関わっていれば読むべきだろう。広義に捉えれば創薬の初期探索プロジェクトも一種の編集作業だと思ってよいだろうなぁと。

編集は、僕が思うに「情報による触発」であり、こちらに求められるのは主観性です。

ProductName はじめての編集 [単行本]
菅付雅信
アルテスパブリッシング / 1890円 ( 2012-01-12 )


メディアの進化の方向

  • フローとストック
  • 権威性と参加性
  • 記録性と創作性
  • 三次元的

ウェブのデザイン

ウェブの特性はその双方向性と更新性にあります。ですので、完成形というものが定まらず、独立した作品として語りにくいため、完結したデザインというよりも常にコンテンツが入れ替わるフォーマットとして語ったほうがいいと思います

読み終わってから改めて考えて見るに、写真で主題を決めて良い構図を探すのも一種の編集作業だし、研究プロジェクトで課題を決めて実験計画を立てるのも編集だよなぁと色々なものがつながった気がした。一種の悟り体験だったかも。

余談だが、読んでる最中にKJMのジャケット手がけた人だと知って懐かしくなった。たしか三条河原町のヴァージンメガストアで買ったはず。

ProductName KYOTO JAZZ MASSIVE
KYOTO JAZZ MASSIVE
フォーライフ ミュージックエンタテイメント / 2727円 ( 1994-04-21 )