У меня есть модульный тест, который использует следующий фиктивный класс
$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'],
]
);
. Я ожидаю, что возвращаемое значение будет 'returnValue'
, когда первый аргумент метода __call
равен 'argument1'
, а аргумент секунд - нет. забота. Если первый аргумент не 'argument1'
, я ожидаю возвращаемое значение null
.
Верны ли эти ожидания?
Независимо от того, что я пытаюсь, возвращаемое значение всегда null
когда я имитирую это значение с помощью метода willReturnMap
.
Если мои ожидания неверны, пожалуйста, подскажите способ достижения sh моих целей - имитировать возвращаемое значение, в зависимости от первого аргумента ( только), а также объясните мне, как применять willReturnMap.