• Тестирование базы данных на PHP (PHPUnit, DbUnit)

    powerman
    @powerman
    Systems Architect, Senior Go/Perl Linux Developer
    Мне в своё время очень помогла разобраться с тестированием книжка Perl Testing: A Developer's Notebook. В подходе к тестированию особой разницы между Perl и PHP нет, так что Вам она тоже может оказаться полезна. Перевода, к сожалению, я по-быстрому не нашёл, возможно она есть только на английском.

    При тестировании один из ключевых моментов — нужно постоянно очень хорошо отдавать себе отчёт в том, что именно мы сейчас тестируем. А тестируем мы обычно наш код, а не окружающую среду (вроде базы данных) — в тестах мы предполагаем, что база данных работает корректно, вопрос в том, корректно ли наш код работает с базой данных. Поэтому, да, можно тестировать работу с базой даже без самой базы — mock-нув функции отправляющие SQL-запросы в базу, и в тесте проверяя, что наш код генерирует именно те SQL-запросы, в том порядке и с теми значениями, которые он должен был сгенерировать (а заодно и подставляя тестируемому коду нужные нам данные под видом «ответа от базы на SQL-запрос»). И да, на реальной базе данных этот код может не работать корректно, не смотря на то, что тесты он проходит — просто потому, что он генерирует не те SQL-запросы, которые нужно генерировать для этого сервера БД. Но это не имеет отношения к тестам — они свою работу выполнили: подтвердили, что код работает именно так, как ожидается. А если задача была поставлена неверно, и код должен делать что-то другое — это проблема постановки задачи, а не тестирования.

    Барабашка портящий базу — это не проблема тестирования кода. Хотите написать тест против барабашек — сравнивайте в тесте схему базы с эталонной, и правьте тест после любого изменения схемы базы. Но смысла в этом нет.

    Совместимость фикстур из тестов с текущей схемой базы проверить очень просто: при запуске теста создавайте тестовую базу данных используя текущую схему основной базы данных, а в фикстурах храните только данные, без схемы таблиц.

    Гемор с необходимостью постоянно поддерживать и корректировать тесты для совместимости с новым кодом — он есть, и его не может не быть. Но усилия, которые на это тратятся, с лихвой окупаются пользой от наличия тестов.
    Ответ написан
    Комментировать
  • Написание CMS на основе фреймворка?

    @edogs
    CMS на Yii имеет право на существование только в том случае, если апгрейд фреймворка до новой версии не остановит ее работу и все функции фреймворка будут работать как задумано. Иначе это будет уже CMS на чем-то похожем на Yii и смысл теряется.
    Поэтому варианты 2 и 3 отпадают по сути.
    А вот к 1 варианту есть смысл прибавить «удаление бутылочных горлышек» которые кушают ресурсы, или с изменением фреймворка и обязательным коммитом в сам Yii… (если их примут) или через плагинизацию, не меняющую основной код Yii (допустим дополнительный кэширующий слой).
    Ответ написан
    3 комментария
  • Узнать предполагаемый размер Label (C# + WPF)?

    @Lazer1999
    Я в таких случаях пляшу от размера текста.
    То есть примерно так:
    SizeF textSize = TextRenderer.MeasureText(text, label.Font);

    Соотв. при автосайзе допуски до размера лейбла считаемы как Padding.
    Итого:
    int labelWidth = label.Padding.Horizontal + textSize.Width;
    int labelHeight = label.Padding.Vertical + textSize.Height;
    Ответ написан
    Комментировать
  • PHP Качество preview фотографий?

    @niko83
    Используй GraphicsMagick — и не забудь использовать фильтр для добавления резкости.
    Фильтр предаёт чёткость изображению, (хотя в примере на фотке вконтакте он не используется)
    в консольном вызове добавить параметр ' -sharpen 1x10'
    (можно и ImageMagick там тоже есть этот фильтр)

    фрагмент для GraphicksMagick одной PHP либы (название не помню, но если интересует, найду её)

    $command = $this->gmPath.' convert'
    . ' ' . escapeshellcmd($path) . ' -crop'
    . ' ' . $srcWidth . 'x' . $srcHeight . '+' . $srcX . '+' . $srcY
    . ' -resize ' . $dstWidth . 'x' . $dstHeight
    . ' -sharpen 1x10'
    . ' -quality 75'
    . ' ' . escapeshellcmd($cacheFile);

    exec($command);
    Ответ написан
    Комментировать
  • Случайная строка из таблицы

    AmdY
    @AmdY
    PHP и прочие вебштучки
    очень советую погуглить по данной теме. но в честь праздника дам готовый ответ, но обещайте погуглить, очень полезна информация
    SELECT pk, data
    FROM test AS r1 JOIN
    (SELECT (RAND() *
    (SELECT MAX(pk)
    FROM test)) AS id)
    AS r2
    WHERE r1.pk >= r2.id
    ORDER BY r1.pk ASC
    LIMIT 1;

    тестировал на миллионе реальных записей, шустренько.
    Ответ написан
    3 комментария
  • Приму в дар ненужный исходный код?

    а-ля группа поддержки недописывальщиков кода?:)

    — Здравствуйте, меня зовут Максим, и я — недописывальщик кода…
    — Здравствуй Максим.
    — Совсем недавно я был бодр и полон решимости, когда начинал писать проект анализатора-прогнозов погоды, но… *всхлипы* куда-то все это ушло, а руки опустились *еще всхлипы* энтузиазма нет, а все партнеры разбежались по другим проектам… *плач*
    Ответ написан
    5 комментариев
  • Имеет ли смысл конвертировать все изображения на сайте в PNG?

    MTonly
    @MTonly
    Веб-разработчик с 2002 года
    В вашем случае имеет смысл настроить серверные HTTP-заголовки для кэширования изображений в браузере на несколько дней (иногда рекомендуют даже на месяц). На уровне htaccess это можно сделать так:

    ExpiresActive on
    ExpiresByType image/gif A2592000
    ExpiresByType image/png A2592000
    ExpiresByType image/jpeg A2592000
    Ответ написан
    2 комментария
  • Влияние минуса(плюса) на карму

    theproof
    @theproof
    1. нет
    2. никак
    3. на единицу

    для плюсования и минусования у каждого в зависимости от его показателей есть «заряд»:

    У вас осталось ххх голосов за карму, топики, вопросы и ххх за ответы и комментарии
    Ответ написан
    1 комментарий