• Как правильно писать unit тесты?

    nonlux
    @nonlux
    В интернете пишут, что тестируемый метод нужно всегда изолировать от любых зависимостей, иначе тестируемый метод в процессе своего выполнения подтянет внешние методы этого же или другого класса, что противоречит юнит-тестированию, так как в таком случае будет тестироваться не одна сущность, а взаимодействие между несколькими сущностями.
    Верно ли это утверждение?


    Я считаю в целом верно. Что бы эту решить проблему придумали дубли (вот гугл на русском показал).

    Т.е если писать чистый юнит-тест для LoginForm, то оптимальным решением на мой взгляд заменить на "моки":
    - YII:$app->:$app->user, который вернет для Yii::$app->user->login()false
    - app\models\User , который вернет для User::findByUsername()null

    К сожалению, с YII не работаю и поэтому более детальною реализацию подобного сейчас написать не могу.

    Можно ли это назвать юнит-тестированием или это всё же интеграционное тестирование?
    И если да, то нормально ли сваливать всё в одну директорию и юнит тесты и интеграционные? Где грань.


    Грань определяет разработчик, его команда и методологии какими они пользуются.
    Например если писать сначала тесты, а потом реализовывать функционал, то они выглядят чище и похожи на юнит-тесты.

    Если же писать сначала код, а потом его покрывать тестами они уже больше похожи на интеграционные, как вы говорите. Собственно так и есть в вашем примере.

    Я лично для себя пришел к выводу что подобная теоретическая мишура мне мешает и я не выделяю тесты на такие категории. Для себя я выделяю тесты которые тестируют бизнес-логику приложения и тесты (спецификации) для кода.
    Ответ написан
    Комментировать
  • Есть ли ресурс с готовыми конфигами Vim?

    nonlux
    @nonlux
    Ну это совсем не по вимовски )
    Конфиг должен быть потом и кровью написан )).
    А вообще есть vimawesome.com там очень много плагинов но настаивать все равно самому.
    А из конфигов есть vim.spf13.com довольно большой и разносторонний.
    Ответ написан
    2 комментария
  • Как создать постоянное подключение для туннелирования с помощью php?

    nonlux
    @nonlux
    Почитал все вопросы ответы по теме.
    По моему в целом проблема высосана из пальца, но сейчас не об этом.

    1. Не понятно для кого это делается. Просто для себя или будут пользователи у вашего решения.
    Если наберется с N пользователей, то не померет ли ваш белый сервер от постоянной перезагрузки страниц (DDos).

    2. аналогично первому только касаемо базы и прочих ресурсов на сервере. Хостинг провайдер не пошлет за постоянной превышение нагрузки?

    3 Черный ящик php. Я не могу посоветовать решения не зная, как урезан php на белом хостинге.

    4. Ближе к телу. Думаю на ваших серверах все реализована так:
    Запрос -> веб сервер (apache, nginx) -> php ( fpm, cgi)

    Все они созданы, чтобы сдохнуть ( т.е как у веб сервера так и php есть настройки времени жизни для запроса) и соответственно бесконечных одиночных запросов в этом контексте ( для http) быть не может.

    Люди уже давно придумали как это обойти : long pooling, web sockets. Даже придумали php, который не умирает (Reactphp).

    Но возможны ли эти решения для вас, зависит от п.п 3 ( см. выше)

    5.
    Может ли php получать и обрабатывать часть информации? (Так как один ответ сервера длится бесконечно и его, естественно надо обрабатывать частями).
    Может ли php отправлять информацию частями? (Поподробнее про буферизацию, пожалуйста).


    Извините, ерунда. см п.п.4
    Правильным решением будет 100 разных POST отправить с серого к белому серверу. На белом все собрать в кучу.

    6. В целом, если вам необходима только выдача данных от серого сервера. То самым простым будет реализация своего static http proxy.
    Т.е. серый генерирует уже готовые страницы отдает их белому. А тот их сохраняет и выдает. Если пользователь запросит, то что серый еще не обработал слать его на ... (404)
    Ответ написан
  • Можно ли научить PHPUnit понимать классы dynamic extension'ов?

    nonlux
    @nonlux
    1. Да я бы мокнул ), но для этого конструктор надо поменять.
    2. Думаю тут ноги пляшут от настроек PHP.
    Посмотрите в каком окружении работает ваш (php.ini) Main и в каком работает phpunit.
    Если мои телепатические способности не подводят. То ваш Main работает с веб-окружением ( php-fpm или cgi и т.д.), а phpunit работает через php-cli. Вся разница в используемом php.ini
    И скорее всего во втором не подключено ваше расширение
    3. Хз, все зависит от логики приложения
    Ответ написан
    Комментировать