Ответы пользователя по тегу PHP
  • Какой смысл mock объектов для юнит тестирования своего кода?

    Отрывок из книги.
    Одной из важных особенностей unit-тестирования является тестирование в
    изоляции. Unit (класс, функция или другой модуль) должен быть изолирован
    от всего остального мира.Это будет гарантировать, что тест тестирует только
    этот модуль. Тест может упасть только по двум причинам: неправильный тест
    или неправильный код тестируемого модуля. Тестирование в изоляции даёт
    нам эту простоту и быстродействие

    Обычно зависимость - это интерфейс, который имеет несколько реализа-
    ций. Использование реальных реализаций этого интерфейса во время unit-
    тестирования - плохая идея, поскольку там могут проводиться те самые опера-
    ции ввода-вывода, замедляющие тестирование и не дающие провести тести-
    рование этого модуля в изоляции. Прогон unit-тестов должен быть быстр как
    молния, поскольку запускаться они будут часто и важно, чтобы разработчик
    запустив их не потерял фокус над кодом. Написал код - прогнал тесты, еще
    написал код - прогнал тесты. Быстрые тесты позволят ему оставаться более
    продуктивным, не позволяя отвлекаться. Решение в лоб задачи изоляции
    класса от зависимостей - создание отдельной реализации этого интерфейса,
    предназначенного просто для тестирования.

    Так вот суть в том, чтобы точечно проверить текущий класс на его функциональность. Моки удодно делать на основе общего интерфейса. Всё мокать не нужно. Но если ваш класс работает с апи, бд, большим обьемом данных. То такая зависимость это плохо.
    Цель теста проверить текущий класс на соответствие требований. А какие данные настоящие или фейк это не важно.

    К примеру есть класс Заказ. Нам нужно его тестировать. У него есть зависимости: Налог и прочее. Класс налога может быть класс, который получает Значение по api. Так вот есть смысл при тестировании Заказа создать мок Налога
    $tax = $this->createMock(Tax::class);
    $tax->method('calculateTax')
    ->willReturn(0);
    
    $newOrder = new Order($tax);

    Дальше идут тесты класс Order. Они будут изолированные. Есть основной класс, который ты тестируешь. Для него ты Мок не создаешь. А вот для классов с зависимостями создаются Моки, но не всегда. Если класс зависимостей например содержит просто константы. То создавать Мок и дублировать код смысла нет
    Ответ написан
    Комментировать
  • Как обратится к псевдониму имени класса используя переменную?

    Я тебя расстрою парень. Для динамического формирования нельзя использовать пространство имён Прийдется писать полный путь ручкми.
    https://www.php.net/manual/ru/language.namespaces....
    Ответ написан
    3 комментария
  • Какой стиль лучше использовать в лапше?

    В документации даже написано. Что рекомендуется первый способ в шаблонах.
    Когда у тебя куча кода и бац } встречается, фиг поймешь ежесекундно что это и из виду теряется легко.
    endif и т.д. куда нагляднее.
    Ответ написан
    Комментировать