🍰

CakePHP+PHPUnitでのモックテスト時には必ず使用メソッド名を配列で渡す

2020/09/25に公開

地味にハマったのでメモ。

public function setUp()
{
    parent::setUp();

    $this->controller = $this->generate('Entities', [
        'models' => [
            'Entity' => ['find', 'findById', 'saveAssociated'] // ここが重要
        ]
    ]);
}

CakePHP におけるコントローラーモックの作成時、'Entity' => []を省略して'Entity'とモデル名のみの表記にすることも可能で、横着してそうやっていました。ところがfindById()といった Magic Methods*が CakePHP では多用されているため、横着してしまうとスタブメソッドが利用できません。

何度やっても期待通りにならないので調べたところ、Magic Methods を含むテスト時には、モック作成時にきちんとメソッド名を定義する必要があります。


* Magic Methods - メソッド名を頼りに自動的に処理内容が決定されるもの。

Discussion