例えば、以下のようなクラスがあって、const MAX_ITEM_PER_USER = 200
として定義されている200の値を、PHPUnitによるテストのときだけ変更したい場合があります。
class UserItem
{
const MAX_ITEM_PER_USER = 200;
}
本来であれば、UserItemにstatic function
としてgetterを用意したほうが、テストしやすいコードになるのですが、事情によっては既存のクラスにメソッドを追加しづらい、追加できない場合もあります。
解決方法
このような場合は、Testの中に下記のようなスタブクラスを予め用意しておきます。
class UserItemStub
{
const MAX_ITEM_PER_USER = 5;
}
その上で、Mockery::namedMock
を利用して、先程作ったスタブクラスをモックとして使用すれば良いです
// モックする
Mockery::namedMock(UserItem::class, UserItemStub::class);
// 値を取得するとモックオブジェクトのconst値が取得できる
echo (UserItemStub::CHUNK_SIZE); // 5
こちらもおススメ