Дополнительное внедрение зависимостей для модульного тестирования - PullRequest
0 голосов
/ 21 января 2011

Я рассматриваю свои варианты настройки класса для юнит-тестирования.Этот конкретный класс должен ВСЕГДА использовать одну и ту же конфигурацию клиента мыла при нормальных обстоятельствах.Я чувствую, что пользователям класса не нужно беспокоиться о настройке мыльного клиента, когда они им пользуются.Или даже имейте в виду, что он вообще использует мыло.

Действительно, единственным исключением является модульное тестирование.Мне нужно уметь высмеивать Soap_Client.Я пришел к следующему подходу, где я создаю мыльный клиент в конструкторе и по желанию могу установить его с помощью setSoapClient ().

class WebServiceLayer
{
    const WSDL_URL = 'https://www.example.com/?WSDL';

    private $soapClient;

    public function __construct()
    {
        $this->soapClient = new Soap_Client(self::WSDL_URL);
    }

    public function setSoapClient(Soap_Client $soapClient)
    {
        $this->soapClient = $soapClient;
    }

    public function fetchSomeResponse()
    {
        $soapClient = $this->soapClient;
        return $soapClient->someRequest();
    }
}

Это правильный способ справиться с этим?Единственная проблема, которую я вижу с этим, состоит в том, что создание экземпляра клиента в конструкторе, который «я слышал» - это то, чего следует избегать.

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

1 Ответ

2 голосов
/ 21 января 2011

Выглядит хорошо для меня ... вы используете стандартную инъекцию сеттера.Единственная странная вещь - возвращение нового клиента в Getter.Почему бы не вернуть ноль, если он не был введен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...