我有一个单元测试,它使用以下模拟类
$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', []);
总之。。。 使用参数映射时,值不能是"不在乎"。