суббота, 28 апреля 2012 г.

DbUnit: чистый sql

Начало: DbUnit: общее описание, DbUnit: пример.

В некоторых случаях сформировать простой датасет не только не просто, но и невозможно; и потому появляется необходимость выполнять "чистые" SQL запросы напрямую к базе данных. Естественно, что при этом желательно бы использовать тот же самый datasource, а ещё лучше - тот же самый DbUnit.
Далее приводится пример такого запроса на основе PreparedStatement с поддержкой транзакционности.

пятница, 27 апреля 2012 г.

DbUnit: пример

Начало: DbUnit: общее описание

Предположим, нам необходимо реализовать тест приложения, сохраняющего данные в БД. Для реализации принципов best practise нам потребуется проинициализировать базу данных (например, очистить её), затем подать на вход приложения какие-то тестовые данные и проверить результат работы приложения, сохранённый в БД. Как это сделать?

четверг, 26 апреля 2012 г.

DbUnit: общее описание

Тестирование приложений, взаимодействующих с базой данных, имеет свои особенности. Накопленный девелоперами и тестировщиками опыт можно сформулировать в виде database unit testing best practices.
    * Каждому разработчику по базе данных. При написании тестов очень важно, чтобы состояние схемы базы данных и самих данных не менялось во время написания теста. Поэтому в проектах с несколькими разработчиками каждый разработчик должен работать в персональной базе данных.
    * Тесты должны быть независимы от результатов других тестов. Проще всего достичь этого, возвращая базу данных перед каждым тестом в начальное состояние. Этого можно добиться, очищая содержимое базы данных или просто не сохраняя результаты тестов в базе данных (rollback после каждого теста).
    * Функция очистки всей базы данных. Часто необходимо или неизбежно сохранение промежуточных данных и результатов тестов в базе данных (например из-за DDL autocommit в Oracle). Необходимо разработать процедуру возвращения базы данных в инициальное состояние (как вариант, можно загружать dump базы данных или написать программу, очищающую содержимое всех таблиц в схеме).
    * Маленькие входные данных. Для большинства тестов нет необходимости в полноценном содержимом базы данных. Вместо этого надо стараться создавать небольшие входные данные, специфичные для каждого теста; это облегчит анализ ошибок и сократит время разработки.
    * Общие данные. Многие тесты базируются на подобных данных. Чтобы ускорить процесс разработки тестов, можно создать наборы примитивных данных, которые могут быть использованы различными тестами. Кроме того, можно сохранять эти данные в базе перед выполнением группы подобных тестов, чтобы ускорить тестирование системы.

В мире Java удобным инструментом, позволяющим упростить реализацию и применение перечисленных принципов, является DbUnit (http://www.dbunit.org) - java framework для тестирования баз данных. Фактически, это расширение JUnit с возможностями дополнения и интеграции с другими инструментами разработки (Maven, Spring, Eclipse, Ant). DbUnit позволяет описать желаемое или ожидаемое состояние базы данных в виде обыкновенных текстовых файлов, а затем легко и просто выполнить инициализацию этой БД перед запуском каждого теста или проверить её актуальное состояние после выполнения теста.

среда, 18 апреля 2012 г.

Log4jdbc

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

Простым, удобным и при этом информативным инструментом для решения задач такого рода являются специальные JDBC logging библиотеки. Подобные библиотеки встраиваются в программу, используя Proxy Design Pattern, перед DataSource или Connection, что легко можно сделать в java-коде или декларативно (Spring).

Существует несколько независимых библиотек, реализующих такую функциональность, например, Log4jdbc (http://code.google.com/p/log4jdbc/). На страничке этого проекта можно найти достаточно подробную информацию о свойствах и возможностях библиотеки. Если кратко, то Log4jdbc:
  • open-source под лицензией Apache 2.0;
  • работает с JDK 1.4 и выше;
  • работает с системой логирования SLF4J 1.x, соответственно, поддерживает log4j, logback, JCL, java.util logging in JDK 1.4;
  • просто настраивается;
  • имеет широкие возможности по объёму и глубине логируемой информации.


вторник, 17 апреля 2012 г.

Run!

"Я не работаю в IT, я так живу". В процессе этой работы/жизни неизменно появляются новые профессиональные знания и умения. Чтобы они не терялись и не лежали мёртвым грузом в локальных файлах и "напоминалках", решил стартовать online-дневник с техническими заметками. Надеюсь, заметки эти будут полезны не только мне, но и читателям.

Сфера деятельности: разработка и автоматизация тестирование программного обеспечения.
Основной язык - java.