📚

StaticMockは使い終わったら必ず破棄する

2021/05/12に公開

そんなことある?

tototoshi/staticmock を使って静的メソッドのテストをしているとき、
不思議なことが起こった。

TestA.php
$mock = \StaticMock::mock('\Stat');
$mock->shouldReceive('retBool')
     ->andReturn(true);
TestB.php
$res = \Stat::retBool();
$this->assetFalse($res);

ちょっとわかりにくいが、
二つのテストケースファイルがあって、
片方でmockの設置をしたのが、
別のファイルで影響していた。

( ゚Д゚)

この手の問題は参照被りとかだろうなと。
foreachに&を使った時の対応と同じことをすればいいんだろうと思った。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

設置したモックを必ず削除

以下のようにnullを放り込む(unsetも有効かも)

$mock = \StaticMock::mock('\Stat');
$mock->shouldReceive('retBool')
     ->andReturn(true);

・・・

$mock = null;

Discussion