Всем привет. Есть класс с последовательными вызовами:
class MyClass
{
public function getExternalData1($request): ExternalResponse1 { ... }
public function getExternalData2($request): ExternalResponse2 { ... }
public function static functionToTest($someData)
{
$data1 = getExternalData1($someData);
$data2 = getExternalData2($data1->value);
return $data2;
}
}
Пытаюсь его замокать:
public function testFunctionToTest()
{
$getExternalData1Value = new ExternalResponse1(['value' => 'someValue']);
$getExternalData2Value = new ExternalResponse2();
$myClassMock = $this->getMockBuilder(MyClass::class)
->disableProxyingToOriginalMethods()
->onlyMethods(['getExternalData1', 'getExternalData2'])
->getMock();
$myClassMock->method('getExternalData1')->willReturn($getExternalData1Value);
$myClassMock->method('getExternalData2')->willReturn($getExternalData2Value);
$myClassMock->functionToTest([ ... ]);
}
Получаю ошибку:
[TypeError] Argument 1 passed to Mock_MyClass::getExternalData2() must be of the type string, null given, called in ...
При этом
$myClassMock->getExternalData1('...')->value
возвращает правильное значение 'someValue'. Как это правильно протестировать?