"Mock Roles, not Objects"をPHPで写経してみた

モックによるインターフェイスの発見 - Digital Romanticismを参考にしつつ、「モックをロールせよ(pdf)」をPHPで写経してみました。

https://github.com/iakio/mrno-php

  • 最初はPHPUnit_MockObjectを使おうと思っていたけど上手く書けなかったのでMockeryとPhakeの両方で実装してみた。PHPUnit_MockObjectで上手く欠けなかった理由としては、Phakeのドキュメントがわかりやすいと思います。
  • やってみると難しい。何をテストしているの変わらなくなってくるのでやはりシーケンス図は描いてみるべき。
  • 特に「3.4 順序の導入」がまだ理解できていない。全てのコードが書かれているわけではないので、この説明の時点で何でテストに失敗したのか、「実装を修正して、呼び出しをClock に移す。」とは何をどう修正したのかわからない。
  • 「3.4 順序の導入」に出てくる.after()はMockeryにもPhakeにも無いので、Mockeryではordered()、PhakeではinOrder()を使う。特にMockeryでは、複数のモックオブジェクト間での呼び出し順を検証したい場合には、->globally()->ordered()とする必要がある。
  • jMockにあるという自己記述的な値というのは便利そうだと思った。
  • GOOSをよんでから出直してきます。

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)