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

    @noRerih Автор вопроса
    Спасибо за подробный ответ.

    По поводу автоматической генерации и сравнения схем — об этом я тоже подумал, и думаю смысл всё же в этом есть. Ещё можно фикстуры генерить автоматически, основываясь на данных рабочей базы, потому что протестировать нужно очень много случаев, и необходимо чтобы различные связи между данными таблиц были соблюдены. Например есть пользователи и их посты. Нужно обязательно чтобы в фикстурах были юзеры, у которых есть один пост, несколько, ни одного. Конечно, при первичном формировании таких данных будет использоваться текущий, то бишь не протестированный код, но в принципе должно получиться.

    Но всё равно главное осталось мне неясным :(( Задача стоит протестировать не код, а работу сервиса, и то, что сервис обращается к БД, как раз дело и усложняет («предпологаем что бд работает корректно» — она-то так и работает, mysql отлаживают другие люди, а вот какие туда вызовы поступают — уже моя ответственность). Какие есть способы протестировать работу с базой без задействования базы? Какие именно данные нужно mock'нуть и где что проверять?

    вот есть например такой класс
    <?php
    // file app/User.php
      class User {
      ...
      public function create($params) {
        $this->pdo->prepare("INSERT INTO `users` ...");
        $this->pdo->execute($params);
      }
    }
    


    И тест
    <?php
    // file tests/TestUser.php
     function testUserIsCreatedSuccessfully() {
        ...
       $user->create(array('firstname'= > 'John', 'lastname' => 'Doe'));
       ...
       $this->assertTablesEqual($expectedTable, $queryTable);
      }
    


    Как именно и что нужно мокапить в функции, тестирующей добавление пользователя? Значит ли это, что нужно править тестируемый метод, чтобы он не в бд ещё писал, а делал нечто другое? Ведь, так или иначе, в коде теста вызывается тестируемый метод, пишущий в базу. Как узнать, что он корректно отработал, не обращаясь к БД?
    Ответ написан
    1 комментарий
  • Тестирование базы данных на 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-запросы, которые нужно генерировать для этого сервера БД. Но это не имеет отношения к тестам — они свою работу выполнили: подтвердили, что код работает именно так, как ожидается. А если задача была поставлена неверно, и код должен делать что-то другое — это проблема постановки задачи, а не тестирования.

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

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

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

    asm0dey
    @asm0dey
    Squirrel?
    Ответ написан
    Комментировать
  • MySQL клиент для Linux

    death_claw
    @death_claw
    Я вот например сам себе написал утилиту на java.
    Если надо все здесь
    Ubuntu Debian
    github.com/strelok1111/MysqlJavaCat/raw/master/MysqlJavaCat.deb
    Windows
    github.com/strelok1111/MysqlJavaCat/raw/master/Win/mysqljavacat_win_dist.exe

    Она простенькая совсем, но я серьезно загнался с автодополнением. Мне удобно.
    Если вам понравится напишите пару строк.
    Ответ написан
    Комментировать
  • MySQL клиент для Linux

    FreeTibet
    @FreeTibet
    dharma supplier
    Я использовал под вайном беспллатную версию от вот этих ребят.

    Но он глючный, зараза, но в целом удобно.
    Ответ написан
    Комментировать
  • MySQL клиент для Linux

    taliban
    @taliban
    php программист
    «SQL менеджер, аналогичный клиенту mysql»
    «удобным механизмом редактирования запросов»
    На сколько я понял Вам нужен консольный клиент? На сколько мне не изменяет память, консоль и удобный механизм редактирования это разные вещи. Консоль — очень удобна для ввода, но для редактирования она плоха.
    Ответ написан
    4 комментария
  • MySQL клиент для Linux

    Gorthauer87
    @Gorthauer87
    Программист
    mysql workbench есть, но он весьма кривой. Самый лучший, что я видел, это Sequel-Pro но он маковский.
    Ответ написан
    1 комментарий
  • MySQL клиент для Linux

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Я пользуюсь phpmyadmin, правда это веб интерфейсная хреновина, но я привык и мне нравится.
    Ответ написан
    2 комментария
  • Массовое изменение значений input по classname

    antoo
    @antoo
    var elems = document.getElementsByClassName('counts');
    for(i=0; i<elems.length; i++) {
    	elems[i].value = '99';
    }
    
    Ответ написан
    1 комментарий
  • Как расположить элементы списка в строку по два пункта?

    @Ano
    <style>
        li { float: left; margin: 1em; }
        li:nth-child(2n+1) { clear: both; }
    </style>
    <ul>
        <li> 1
        <li> 2
        <li> 3
        <li> 4
        <li> 5
        <li> 6
    </ul>
    Ответ написан
    3 комментария
  • Фундаментальная литература по веб-разработке на JAVA?

    @atomicus
    «Java for the Web with Servlets, JSP, and EJB» (Budi Kurniawan). Книга уже довольно старая (2002), но очень и очень толковая. Кроме нее полезно почитать «Технологии программирования. Том 3» (Х. Дейтел, П. Дейтел).

    И как уже советовали читать сервлеты до полного просветления, а потом все пути открыты.
    Ответ написан
    Комментировать
  • Фундаментальная литература по веб-разработке на JAVA?

    Три основных варианта:
    — написать свой веб-сервер, который будет слушать 80-й (по дефолту) порт, рулить процессами/потоками, интерпретировать HTTP и т. п.
    — использовать CGI
    — смириться с гордыней и изучать платформу сверху вниз, а не снизу вверх.

    Судя по всему первые два порочные пути нынче, приемлемы были лет 15-20 назад (мы, как всегда, отстаём, если не балет :) ) — теперь все юзают фреймворки/CMS даже (или «тем более?» для визиток/«бложиков». Сужу даже по PHP и фрилансу (простор для «костылеписателей»): заказов на разработку с нуля движков практически нет — даже заказчики просят указать используемый фреймворк/CMS (видимо, гуглят по поводу его глючности и тормознутости) или, хотя бы, реальные успешные варианты использования самописных движков.
    Ответ написан
    Комментировать
  • Фундаментальная литература по веб-разработке на JAVA?

    @1nd1go
    Читайте тогда SCWCD Exam study kit 2nd edition и/или Head First Servlet and JSP. Очень круто, разве что по j2ee 5.
    Ответ написан
    1 комментарий
  • Фундаментальная литература по веб-разработке на JAVA?

    Foror
    @Foror
    Графоман
    Фундамент веба в java — servlet'ы, как раберётесь, считай знаешь фундамент, дальше можно по spring документацию или книжки читать.
    Ответ написан
    Комментировать
  • Фундаментальная литература по веб-разработке на JAVA?

    vilonara
    @vilonara
    Ответ написан
    Комментировать
  • Сайт будет в дауне пару дней - что показывать поисковикам?

    gigigi
    @gigigi
    503 Service Unavailable (Сервис недоступен).
    Сервер временно не имеет возможности обрабатывать запросы по техническим причинам (обслуживание, перегрузка и прочее). В поле Retry-After заголовка сервер может указать время, через которое клиенту рекомендуется повторить запрос.

    Это касательно заголовков, а страницу можно показать каку-то свою, где пользователям будет сказано когда сайт станет снова доступен.
    Ответ написан
    1 комментарий
  • Обработка запросов в базах данных?

    Во-первых, существуют различия данных процессов (в основном в отношении индексов) для различных движков БД. То есть вариантов много.
    Во-вторых, по поводу MySQL можно почитать в Справочном руководстве по MySQL. Читать придётся много.
    Ответ написан
    1 комментарий
  • Какую книгу выбрать?

    andreycha
    @andreycha
    Вариант 2010 года — это просто дополнительный тираж. Они ничем не отличаются.
    Ответ написан
    Комментировать
  • Чем протирать монитор?

    BorodinKO
    @BorodinKO
    Я пользуюсь микрофибровой тряпочкой от очков, чистит экран хорошо, но от въевшихся пятен не спасает…
    Ответ написан
    Комментировать