oopオブジェクト指向とテストについて私はオブジェクト指向や特に自動テスト周りの実務経験に乏しいわけですが、最近になってようやくテストをきちんと書いたりテストファーストによって良い設計になるみたいな実感を得たりしています。テストを書かない文化にいたので、注意しないとすぐにモノリシックな設計になってしまい、後から「テスト書くのどうすんだこれ」みたいになってしまうことも多い。Injection依存性の注入とか訳される、依存しているオブジェクトを直接クラスの中に持っておくのではなくコンストラクタとかで受け取れるようにして依存性を分離しておく仕組みです。オブジェクトに依存しています。件を取得するものとします。例が適当なため登場していないが実際他にもいろんなオブジェクトに依存していることでしょう。}}さてこの実装には問題があります。出てきているため、これをモックして一時的に振る舞いを変えるということができないのです。動作を前提としてしまうため単体テストできません。単体テストができないとすべてを結合して粒度の大きなテストしかできなくなるため、問題が起きたときに問題の切り分けが難しくなります。この例はまだ単純だからよいのですが、他にもいろんなオブジェクトに依存しているとすると依存オブジェクト一つ一つを調べなければならないため、問題箇所の特定が難しくなるのです。するのかというと、依存性を抽象的に宣言しておいてそのインターフェイスに対してメッセージを呼ぶということをやります。具体的には次のようにします。インスタンスを取るようになりました。トレイトのオブジェクトであると言っているだけで、その具体的な実装クラスは指定されていないことです。インスタンスを渡せば良くなり、依存しているオブジェクトの振る舞いを一時的に変えるということができるようになります。クラスの単体テストは次のように書けます。オブジェクトの振る舞いをモックしています。メソッドのテストが、依存しているオブジェクトをうまくモックした状態で実行できているのがわかります。できるような設計にしておきます。テストの際には依存しているオブジェクトのところに挙動を適宜モック・スタブしたオブジェクトを渡せば、依存オブジェクトの振る舞いを一時的に固定することができ、テストしやすくなる。