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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    https://github.com/index0h/php-conventions#7-тести...

    Конкретно по коду:
    1. Не стоит упарываться по разбиванию всего на отдельные методы. Фактическую сложность вы не уменьшите, вместо этого заставите инженера, который будет это смотреть бегать по классу что бы связать как-то ваши однострочники. Конкретно в вашем случае стоит сделать всего один метод getValue, а то что вы разбрасали по защищенным - запихнуть в getValue.

    2. Инстансы db и timedate стоит передавать в конструктор явно, а от статики отказываться, на сколько это возможно.
    Ответ написан
    4 комментария
  • Правильно ли я пишу phpunit тесты?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вообще говоря что бы покрыть этот метод нужно как минимум 3 теста: когда filter_var не отработал, result приводится к true и result приводится к false. Еще не хватает мока метода loadFromCache, я не вижу, что бы вы покрыли его лог ку работы.

    Проверка на isset не имеет смысла. Я бы еще добавил type hint на query. Что будет, если туда closure загнать?

    Так же если чтото идет не так - бросайте исключения, не надо вот этой мерзостью echo обмазываться.

    UPD

    ganjo888 Вот вам полезного чтива: https://github.com/index0h/php-conventions#7-тести...
    Ответ написан
    7 комментариев
  • Как прикрутить модульное тестирование на старый проект?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Я бы на вашем месте сначала актуализирлвал окружение. Места с депрекейтед кодом - стоит переписать. Что касается тестов: в развиваемом проекте они постоянно переписываются, это вполне норм.
    Ответ написан
  • Правильно ли я пишу моки?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    крофьИзГлаз.jpg

    Вы не задумывались, почему в моках можно подменять методы, а не свойства?

    Основной смысл мока в том, что вы можете задать и проконтролировать его поведение.

    1. Прочитайте про PSR, не плодите каку.
    2. Моки имеет смысл делать без конструктора И прописывать заглушки под вызываемые методы.
    3. Методы, что не должны быть вызваны - тоже заменяются заглушками, но в expects заганяете never.
    4. Старайтесь не использовать статику, на сколько это возможно. Тестировать ее возможно только косвенно.
    5. Старайтесь соблюдать SOLID. В вашем примере может это конечно неудачное название, но ивент как правило - это некий скоп данных, не стоит обременять его логикой.
    6. Работа с бд в ActiveRecord может и удобная, на для тестов - эт говно, сточки зрения безопасности и расширения - увы, тоже. Конкретно в вашем случае создайте отдельный метод, который будет обновлять ваш идентификатор, напишите тест для него который будет работать с БД. Для ивента вам стоит проверять только тот факт, что метод вызвался с корректными данными.
    Ответ написан
    Комментировать