エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

安易にMockeryでoverload:XXXを使わないほうがいい【454日目】

overloadって?

こちらで軽く内容触れています。

www.nyamucoro.com

なんで安易に使わない方が良いの?

overloadは、対象のクラスがインスタンス化されたとき、全てのインスタンスが入れ替わります。

では、以下のようなコードがあったとき、

function func() {
    $user = $this->xxx_repository->xxx();
    $some_obj = $this->yyy_repository->yyy();
    $zzz_obj = $this->zzz_service->zzz();
}

このときに、User::classをoverloadした。これで$userはいい感じに出来たなー
ってなって、もしzzz_serviceでUser::classがインスタンス化されてたら?

全てのコードを自分で書いたならまだしも、そうでなければ、知らないところでインスタンス化されている可能性があります。

予期しない動作が起こる可能性がある。それが、影響範囲の広いコードを扱うということです。

あ、説明のために書いたので、zzz_serviceモックするだろというツッコミはおいておいてください(´;ω;`)

影響範囲の広さ考えよう

不要なところにまで影響するとかを考えると、予期しない動作が起こる可能性があります。

ちなみに、本当に必要な場合もあるので、理由なく安易に使わないでってだけです!

テスト通ったぜー!って思っていたら、実は本来通るべきではなかったとかあるので、注意してコード書こうと思いました!(ちなみに、実際通ってなかったです