Я нашел библиотеку php с именем Runkit , но я не хочу подходить к этому подходу. Она кажется хакерской и излишней для рассматриваемой проблемы.
Функция getAuthClient()
определяется следующим образом
private function getAuthClient() {
return $this->clients->getClient('auth');
}
С $this->clients
определяется конструктором
public function __construct(ClientRepo $clients) {
$this->clients = $clients;
}
Итак, я высмеял ClientRepo
и выставил метод getClient()
для возврата Mock из AuthClient
(независимо от ввода), чтобы я мог контролировать возврат вызова fetchUserFromToken()
.
public function testGetUser() {
$client = $this->createMock(WebdevClient::class);
$client->expects($this->any())
->method('fetchUserFromToken')
->will($this->returnCallback(function()
{
// TARGET CODE
}));
$clients = $this->createMock(ClientRegistry::class);
$clients->expects($this->any())
->method('getClient')
->will($this->returnCallback(function() use ($client)
{
return $client;
}));
$object = new TargetObject($clients);
$result = $object->getUser(...);
// ... Assertions to follow
}