エンジニアのひよこ_level10

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

Mockeryでoverload:XXX使うことはあまりないのではという話【453日目】

overloadとは

該当するクラスのインスタンスが作成されたときに、そのインスタンスをモックオブジェクトにすり替えるよ!

Mockery::mock('overload:' . User::class);

これなら、ユーザークラスのインスタンスが作られたら、モックオブジェクトのインスタンスに変わってるよ!

テストコードがおかしい説

これを使う状態って、テストコードがおかしいって一回疑ってもいいのかな?って思っています。

$xxx = $this->xxx_repository->get();

このときは、xxx_repositoryをモックして、そのreturn値をモックオブジェクトにしたり、
xxx_repositoryのstubをいい感じに作ってやるとか。

元コードがおかしい説

$xxx = new User();

ほら、ここでインスタンス化してるからoverloadしかなくないか?

って話だとしたら、その関数でUserインスタンスインスタンス化するコードでいいの?とか。

例えばインスタンスを生み出すところを、ラップ関数にしてやるとか。
Userがモデルインスタンスとかなら、そもそもリポジトリに書いてやるべきとか。

関数内でnewすべき場合もあるかもですが、一度疑ってみてもいいかも

overloadのままじゃ困るのは?

テストする関数外に対して、そのテストコードは干渉してたりしないかなとか。

あと、その後のテストがoverloadに依存してしまってるとかすると、各関数単体でテスト出来ないとか。

依存するのが正しいのであればいいですが、ちょっと見直してみてもいいかも。