PHPUnitの戻り値マップ()読み取り結果をスタブアウトします。期待どおりの結果は得られませんが、同等のreturnCallback()は得られます。テストケースご自身で確認したい場合はご利用いただけます。
戻り値マップ()
$enterprise = $this->getMock('Enterprise', array('field'));
$enterprise->expects($this->any())
->method('field')
->will($this->returnValueMap(array(
array('subscription_id', null),
array('name', 'Monday Farms')
)));
$enterprise->subscribe('basic');
結果:
Subscription ID: NULL
Name: NULL
戻りコールバック()
$enterprise = $this->getMock('Enterprise', array('field'));
$enterprise->expects($this->any())
->method('field')
->will($this->returnCallback(function ($arg) {
$map = array(
'subscription_id' => null,
'name' => 'Monday Farms'
);
return $map[$arg];
}));
$enterprise->subscribe('basic');
結果:
Subscription ID: NULL
Name: string(12) "Monday Farms"
エンタープライズ::購読
public function subscribe() {
echo 'Subscription ID: ';
var_dump($this->field('subscription_id'));
echo 'Name: ';
var_dump($this->field('name'));
}
returnValueMap() が期待どおりに動作しないのはなぜでしょうか? 正確には何が足りないのでしょうか?
ベストアンサー1
私も同じ問題を抱えていましたが、結局returnValueMap()は関数のすべてのパラメータをマップする必要があることがわかりました。オプションを含む、次に目的の戻り値。
Zend Framework の関数の例:
public function getParam($key, $default = null)
{
$key = (string) $key;
if (isset($this->_params[$key])) {
return $this->_params[$key];
}
return $default;
}
次のようにマッピングする必要があります:
$request->expects($this->any())
->method('getParam')
->will($this->returnValueMap(array(array($param, null, $value))));
中央にヌルがないと機能しません。