Как подделать ресурс для модульного теста в PHP? ⇐ Php
-
Гость
Как подделать ресурс для модульного теста в PHP?
У меня был метод, который открывал сокетное соединение, использовал его, а затем закрывал. Чтобы сделать его тестируемым, я вынес работу с соединением в отдельные методы (см. код ниже).
Теперь я хочу написать модульный тест для barIntrefaceMethod() и мне нужно имитировать метод openConnection(). Другими словами, мне нужен поддельный ресурс.
Возможно ли это / Как «вручную» создать переменную типа ресурс в PHP (чтобы подделать дескрипторы типа «открытых файлов, подключений к базе данных, областей холста изображения и лайк» и т. д.)?
FooClass
класс FooClass { публичная функция barIntrefaceMethod() { $connection = $this->openConnection(); fwrite($connection, 'некоторые данные'); $ответ = ''; while (!feof($connection)) { $response .= fgets($connection, 128); } вернуть $ответ; $this->closeConnection($connection); } защищенная функция openConnection() { $ошибка = 0; $errstr = ноль; $connection = fsockopen($this->host, $this->port, $errno, $errstr); если (!$соединение) { // TODO Используйте конкретное исключение! throw new Exception('Соединение не удалось!' . ' ' . $errno . ' ' . $errstr); } вернуть $соединение; } защищенная функция closeConnection (дескриптор ресурса $) { вернуть fclose($handle); } }
У меня был метод, который открывал сокетное соединение, использовал его, а затем закрывал. Чтобы сделать его тестируемым, я вынес работу с соединением в отдельные методы (см. код ниже).
Теперь я хочу написать модульный тест для barIntrefaceMethod() и мне нужно имитировать метод openConnection(). Другими словами, мне нужен поддельный ресурс.
Возможно ли это / Как «вручную» создать переменную типа ресурс в PHP (чтобы подделать дескрипторы типа «открытых файлов, подключений к базе данных, областей холста изображения и лайк» и т. д.)?
FooClass
класс FooClass { публичная функция barIntrefaceMethod() { $connection = $this->openConnection(); fwrite($connection, 'некоторые данные'); $ответ = ''; while (!feof($connection)) { $response .= fgets($connection, 128); } вернуть $ответ; $this->closeConnection($connection); } защищенная функция openConnection() { $ошибка = 0; $errstr = ноль; $connection = fsockopen($this->host, $this->port, $errno, $errstr); если (!$соединение) { // TODO Используйте конкретное исключение! throw new Exception('Соединение не удалось!' . ' ' . $errno . ' ' . $errstr); } вернуть $соединение; } защищенная функция closeConnection (дескриптор ресурса $) { вернуть fclose($handle); } }
Мобильная версия