PHPUnit 的 returnValueMap 没有产生预期的结果

标签 php cakephp phpunit

我正在尝试使用 PHPUnit 的 returnValueMap() stub 读取的结果。它没有产生预期的结果,但等效的 returnCallback() 可以。我做了我的test case如果您想自己检查,可以使用。

returnValueMap()

$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

returnCallback()

$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() 没有像我期望的那样工作?我到底错过了什么?

最佳答案

我遇到了同样的问题,最终发现 returnValueMap() 必须映射函数的所有参数,包括可选参数,然后是所需的返回值。

来自 Zend 框架的示例函数:

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

中间没有null,就不行了。

关于PHPUnit 的 returnValueMap 没有产生预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748607/

相关文章:

php - 将mysql结果放在一个数组中

php - json 编码 � 值变为空

php - 如果已通过身份验证并且用户存在于数据库中,则将 Facebook 用户登录到 CakePHP 应用程序

php - 如何使 SonarQube PHP 插件与 PHPUnit 一起使用?

php - 用 mock 来 mock 特征方法

php - 如何在使用数据提供程序的同时保持测试的小型化?

javascript - JQuery 在使用 PHP 的 json_encode 时给出 JSON 语法错误

cakephp 3没有时间显示日期

php - CakePHP - 使用 HABTM 连接表字段排序

php - Foreach 与 php 和 mysql