PHPUnit willReturnMap 总是返回 null



我有一个单元测试,它使用以下模拟类

$this->stubHandle = $this->getMockBuilder(Handle::class)->disableOriginalConstructor()->getMock();

当我跑步时

$key = new Key($this->stubHandle);
$this->stubHandle->method('__call')->will($this->returnCallback('var_dump'));
$key->nonExistingMethod('element0', 'element1', []);

它输出

string(17) "nonExistingMethod"

array(3) {
[0] =>
string(8) "element0"
[1] =>
string(8) "element1"
[2] =>
array(0) {
}
}

我认为这意味着方法__call的第一个参数是一个字符串,第二个参数是一个数组。没有更多的争论通过。

当我模拟方法的返回值时__call喜欢

$this->stubHandle->method('__call')->willReturn(1);

返回值始终按预期1

当我模拟方法的返回值时__call喜欢

$this->stubHandle->method('__call')->willReturnMap(
[
['argument1', null, 'returnValue'],
]
);

我希望当方法__call的第一个参数'argument1'而秒参数不在乎时返回值'returnValue'。 如果第一个参数不是'argument1',我希望返回值为null

这些期望是否正确?

无论我尝试什么,当我使用方法willReturnMap模拟此值时,返回值总是null

如果我的期望是错误的,请引导我找到一种方法来实现我的目标来模拟返回值,这取决于第一个参数(仅(,并向我解释如何应用 willReturnMap。

看来我对方法的搜索willReturnMap误导了我。
我假设在地图上使用null,它会充当"不在乎",但它的字面意思是null.

$this->stubHandle->method('__call')->willReturnMap(
[
['nonExistingMethod', null, 'returnValue'],
]
);

意味着方法__call的参数必须显式地'nonExistingMethod'null如果您希望返回值'returnValue'。任何其他参数值都将返回null
例如$key->nonExistingMethod(null);

在我的示例中,要使地图返回'returnValue',它应该是:

$this->stubHandle->method('__call')->willReturnMap(
[
['nonExistingMethod', ['element0', 'element1', []], 'returnValue'],
]
);
$key->nonExistingMethod('element0', 'element1', []);

总之。。。 使用参数映射时,值不能是"不在乎"。

最新更新