[#] [Перевод] Киски: Рефакторинг. Часть вторая или лечение зависимостей
habrabot(difrex,1) — All
2015-07-22 17:30:03


![image][1] Этот перевод является [продолжением][2] цикла статей про рефакторинг от Matthias Noback.

#### Мир не так надежен, чтобы на него опираться

Во время юнит тестирования нет необходимости в том, чтобы внешняя среда была вовлечена в сам процесс тестирования. Выполняя реальные запросы к базе данных, HTTP запросы или же запись в файлы, вы замедляете тесты, так как эти операции непредсказуемы. Например, если сервер, к которому вы совершаете запросы во время тестирования упал или же ответил не лучшим образом — юнит тест упадет даже в том случае, если все остальное работает верно. Это плохо, так как юнит тесты должны падать только тогда, когда код выполняет что-то, чего он делать не должен. Как можно было заметить в прошлой статье, оба класса (CachedCatApi и RealCatApi) зависят от внешних факторов. Первый из них записывает файлы в файловую систему, второй — делает реальные HTTP запросы, в то время как эти моменты довольно низкоуровневые и для них не используются правильные инструменты. Более того, в этих классах не учитывается большое количество пограничных случаев. Оба класса могут быть лишены подобных зависимостей и для этого достаточно того, чтобы новые классы инкапсулировали все эти низкоуровневые детали. Например, мы запросто можем убрать вызов file\_get\_contents() в другой класс с названием FileGetContentsHttpClient.

class FileGetContentsHttpClient
{
public function get($url)
{
return @file_get_contents($url);
}
}


[Читать дальше →][3]

[1]: https://habrastorage.org/getpro/habr/post_images/389/bf3/282/389bf3282a848b64b37aa11a60bce887.jpg "Franz Marc - Girl with cat II, 1912"
[2]: http://habrahabr.ru/post/262995/
[3]: http://habrahabr.ru/post/263139/#habracut