无法使用常量默认参数模拟方法

时间:2016-09-27 11:05:14

标签: php phpunit

我在测试方法中有以下代码:

$container = $this
    ->getMockBuilder(ContainerInterface::class)
    ->getMock();

$container->method('get')
    ->will($this->returnValueMap([
        ['a', 'b'],
        ['c', 'd']
    ]));

var_dump($container->get('a'));

exit;

我只是想创建一个存根(基于一个接口)。但这会返回NULL。但是,如果我将方法从get更改为has,它确实有效(返回b)。

签名之间的区别如下:

public function get($id, $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE);

public function has($id);

为什么它不起作用,我该如何解决?

1 个答案:

答案 0 :(得分:1)

PHPUnit不支持考虑默认参数。

所以你需要改变这个:

$container->method('get')
    ->will($this->returnValueMap([
        ['a', 'b'],
        ['c', 'd']
    ]));

进入这个:

$container->method('get')
    ->will($this->returnValueMap([
        ['a', 1, 'b'],
        ['c', 1, 'd']
    ]));

希望这个帮助