Я относительно новый конвертер для модульного тестирования в целом, и я столкнулся с камнем преткновения здесь:
Как проверить код, который подключается и выполняет операции на удаленном FTP-сервере, используя встроенные функции ftp PHP? Некоторый googling оказался быстрым насмешливым вариантом для Java (MockFtpServer), но ничего не доступно для PHP.
У меня есть подозрение, что ответ может заключаться в создании класса-оболочки для PHP-функций ftp, которые впоследствии могут быть заглушены/изделены, чтобы имитировать успешные/неудачные операции ftp, но я бы очень признателен за вклад от людей, которые умнее меня
Обратите внимание, что я работал с PHPUnit и нуждаюсь в помощи в этой структуре.
В соответствии с запросом от @hakre упрощенный код, который я хочу проверить, выглядит следующим образом. Я, по сути, прошу наилучшего способа проверить:
public function connect($conn_name, $opt=array())
{
if ($this->ping($conn_name)) {
return TRUE;
}
$r = FALSE;
try {
if ($this->conns[$conn_name] = ftp_connect($opt['host'])) {
ftp_login($this->conns[$conn_name], $opt['user'], $opt['pass']);
}
$r = TRUE;
} catch(FtpException $e) {
// there was a problem with the ftp operation and the
// custom error handler threw an exception
}
return $r;
}
ОБНОВЛЕНИЕ/РЕШЕНИЕ РЕЗЮМЕ
Резюме проблемы
Я не был уверен, как тестировать изолированные методы, требующие связи с удаленным FTP-сервером. Как вы должны тестировать возможность подключения к внешнему ресурсу, на который у вас нет контроля, правильно?
Резюме решения
Создайте класс адаптера для операций FTP (методы: connect, ping и т.д.). Этот класс адаптера затем легко заглушается, чтобы возвращать определенные значения при тестировании другого кода, который использует адаптер для выполнения операций FTP.
ОБНОВЛЕНИЕ 2
Недавно я наткнулся на отличный трюк с использованием пространств имен в ваших тестах, что позволяет вам "фальсифицировать" встроенные функции PHP. Хотя адаптер был правильным способом в моем конкретном случае, это может быть полезно для других в подобных ситуациях:
Мозаичные глобальные функции php для модульного тестирования