モックを作ってからはPHPUnitままなので、CakePHP2だけでなくPHPUnitでも同じ事できます
呼ばれる回数
$mock->expects($this->never()) //1度も呼ばれない
->method('_getSiteTimezone')
->will($this->returnValue('Asia/Tokyo'));
```php
$mock->expects($this->once()) //1回だけ呼ばれる
->method('_getSiteTimezone')
->will($this->returnValue('Asia/Tokyo'));
$mock->expects($this->exactly(2)) //2回呼ばれる
->method('_getSiteTimezone')
->will($this->returnValue('Asia/Tokyo'));
$mock->expects($this->any()) // 何回か呼ばれる
->method('_getSiteTimezone')
->will($this->returnValue('Asia/Tokyo'));
methodの戻り値指定
$mock->expects($this->once())
->method('_getSiteTimezone') // メソッド名
->will($this->returnValue('Asia/Tokyo')); // 戻り値指定
$map = array(
['public_type', true],
['publish_start', true],
['publish_end', false]
);
$mock->method('hasField'')
->will($this->returnValueMap($map));
特定の引数で呼ばれたか
$mock->expects($this->once()) // 1回だけ
->method('get') // メソッド名
->with($this->equalTo('指定引数'));
ビヘイビアをモックに差し替える
// まず取り除く
$this->UploadFile->Behaviors->unload('Upload');
// モック生成
$uploadBehaviorMock = $this->getMock('UploadBehavior', ['uploadSettings']);
$uploadBehaviorMock->expects($this->once()) //1回だけ呼ばれる
->method('uploadSettings')
->with(
$this->isInstanceOf('Model'),
$this->equalTo('real_file_name'),
$this->equalTo($options));
// ClassRegistoryを使ってモックを登録。
// まずremoveObjectしないとaddObjectできないのでremoveObjectする
ClassRegistry::removeObject('UploadBehavior');
// addObjectでUploadBehaviorでMockが使われる
ClassRegistry::addObject('UploadBehavior', $uploadBehaviorMock);
// このloadではモックがロードされる
$this->UploadFile->Behaviors->load('Upload');
testに下記突っ込んでもいいかも
protected function _behaviorMock($model, $mockBehaviorName, $mockMethod) {
// まず取り除く
$model->Behaviors->unload($mockBehaviorName);
// モック生成
$mockBehavior = $this->getMock($mockBehaviorName . 'Behavior', [$mockMethod]);
// ClassRegistoryを使ってモックを登録。
// まずremoveObjectしないとaddObjectできないのでremoveObjectする
ClassRegistry::removeObject($mockBehaviorName . 'Behavior');
// addObjectでUploadBehaviorでMockが使われる
ClassRegistry::addObject($mockBehaviorName . 'Behavior', $mockBehavior);
// このloadではモックがロードされる
$model->Behaviors->load($mockBehaviorName);
return $mockBehavior;
}