PHPUnit の returnValueMap が期待どおりの結果を返さない 質問する

PHPUnit の returnValueMap が期待どおりの結果を返さない 質問する

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))));

中央にヌルがないと機能しません。

おすすめ記事