Анализ требований и пробная версия

Постановка задачи. Проектирование интерфейса компонента через юнит-тестирование и разработка абстрактных типов данных. Сознание первоначальной простой версии библиотеки.

  • 00:00:07 - Компонент геолокатора
  • 00:00:48 - Внешний вид и тесты
  • 00:03:54 - Структура Location
  • 00:04:52 - Первая версия локатора
  • 00:06:10 - Запрос в API
  • 00:07:26 - Обработка ответа из API
  • 00:08:52 - Обзор MVP
  • 00:09:27 - Инкапсуляция проверок в Value Object
  • 00:11:10 - Тест для объекта-значения
  • 00:11:47 - Защита через запрет наследования
  • 00:12:32 - Разделение тестов
  • 00:13:43 - Обзор промежуточного результата
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (13)
Alex

Спасибо Дмитрий. Как всегда, понятно и познавательно.

Ответить
Alex

(ООП) Просьба. Дмитрий, не могли бы вы в одном из следующих видео хоть мимолётом упомянуть зачем в symfony делают следующее Controller exntends AbstractController а он в свою очередь имплементит ServiceSubscriberInterface. Почему не прямо имплементит интерфейс, а через абстрактный класс? Какой профит? Если можно, на маленьком примере. Где это можно применять в практике? Благодарю за ценные уроки и труд.

Ответить
Дмитрий Елисеев

Класс Controller теперь deprecated.

Ответить
friend

1) В конструкторе класса Ip вы добавили валидацию адресов ipv6.

Для корректной валидации необходимо добавить использование ключей FILTER_FLAG_IPV*:

filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)
filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)

2) Указанный вами адрес 8:8:8:8:8:8:8:8 функция валидации не воспринимает;

3) Добавьте пожалуйста ваши исходники кода этих уроков.

Ответить
friend

Скрин на 13:40, у меня при запуске этого теста сервис возвращает ошибку:

1) LocatorTest::testNotFound
file_get_contents(https://api.ipgeolocation.io/ipgeo?apiKey=10e0a6cf15+&ip=127.0.0.1): failed to open stream: HTTP request failed! HTTP/1.1 423 Locked

Подскажите, как ее описать в тестах?

Ответить
Андрей

Проверять ответ, если ответ message == 'Provided API key is not valid.'

  • throw new Exception('Ошибка Api ключа.');
Ответить
Дмитрий Елисеев

Unit-тесты не должны ходить в сторонние сервисы.

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

Ответить
Дмитрий

Подскажите, я наверное упустил при изучении теории, что означает: : ?Location : ?string без знака вопроса, понятно, тип возвращаемых данных, а вот с вопросом, впервые вижу :(

Ответить
Дмитрий Елисеев

Знак вопроса показывает, что может быть null.

Ответить
Дмитрий

у Google ipv6 - 2001:4860:4860::8888

Ответить
Дмитрий
public function testNotFound(): void
{
        $location = null;
        self::assertNull($location);
}

так работает

Ответить
Максим

Спасибо, очень понятно и полезно, за ваши курсы, было бы круто просто кнопку для доната.

Ответить
Дмитрий Елисеев

Лично можно задонатить у меня на сайте

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Google
GitHub
Yandex
MailRu