PHPUnit Mock Вызов функции - PullRequest
       24

PHPUnit Mock Вызов функции

0 голосов
/ 22 января 2020

У меня есть следующая функция внутри объекта, которую я буду sh проверять

public function getUser($credentials, UserProviderInterface $userProvider)
{
    $resourceOwner = $this->getAuthClient()->fetchUserFromToken($credentials);

    // ... Code to create user if non-existent, update values, etc.
    // ... Basically the code I want to test is here

    return $user;
}

Вызов getAuthClient() возвращает объект Client с доступной функцией fetchUserFromToken

Как я могу в тесте PHPUnit насмехаться над fetchUserFromToken, чтобы просто вернуть ResourceOwner объект? Потому что фактическая функция выполняет много механизмов аутентификации и выходит за рамки этого теста

1 Ответ

0 голосов
/ 22 января 2020

Я нашел библиотеку 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...