@danip: да, мы делаем это таким образом на Java. Но я уверен, что есть способ достичь этого и в PHP. Дождемся, пока другие ответят на эту тему.

я есть метод с некоторой логикой, и я не уверен, как его тестировать. Поскольку это модульный тест для этого конкретного метода, он должен выполняться без подключения к базе данных. Я читал о заглушках и макетах, но не могу найти способ применить их в этой ситуации.

Я хотел бы заставить Client: GetClient возвращать объект client с правильными свойствами, чтобы я мог проверить каждую логическую ветвь.


class ClientType {
    function GetClientType($id) {

    $objClient = Client::GetClient($id);

    if ($objClient->Returning == 1) {
        return 'returning';
    }
    else {
        return 'normal';
    }
    }


Это тест, который я имел в виду


class ResourceTest extends PHPUnit_Framework_TestCase {
    function testGetClientType() {
        $objClientType = new ClientType();
        $this->assertTrue($objClientType->GetClientType(100), 'normal');
    }
}

Проблема заключается в зависимости $ objClient = Client :: GetClient ($ id); GetClient извлечет клиента из базы данных, но мне нужно заменить его на заглушку, чтобы модульные тесты работали без реального доступа к базе данных.

Заключение

Если у вас есть код, подобный представленному, выполните рефакторинг и используйте Dependency Injection.Если у вас есть устаревший код или вы просто не хотите проводить рефакторинг, попробуйте это решение:http://sebastian-bergmann.de/archives/885-Stubbing-Hard-Coded-Dependencies.html