Дразнить сервер MySQL с помощью Java - PullRequest
6 голосов
/ 10 декабря 2010

Поскольку я не очень хорошо разбираюсь в базах данных, некоторые детали могут быть неактуальны, но я включу все:

В рамках проекта в моем университете мы создаем веб-сайт, который использует JSP, сервлеты и использует сервер MySQL в качестве бэкэнда.

Я отвечаю за настройку таблиц в БД и за создание классов Java для взаимодействия с ней. Однако мы можем подключиться к серверу MySQL только из университета, в то время как все мы (7 человек) работаем в основном дома.

Я создаю интерфейс QueryHandler, у которого есть метод, который принимает строку (представляющую запрос) и возвращает ResultSet. Мой вопрос заключается в следующем: как мне создать класс, который реализует этот интерфейс, который будет имитировать базу данных и позволять другим использовать разные DBHandler s, не знать различий и позволять мне тестировать разные запросы без подключения к реальной базе данных MySQL?

РЕДАКТИРОВАТЬ : Я не очень уверен в различиях между базами данных SQL, но, очевидно, все запросы, которые я выполняю на MySQL, должны выполняться на макете.

Ответы [ 5 ]

6 голосов
/ 10 декабря 2010

Почему бы просто не установить собственную базу данных MySQL для тестирования? Он работает на Windows, Mac и Linux, и это не слишком много ресурсов. Он установлен на моем ноутбуке для локального тестирования.

2 голосов
/ 10 декабря 2010

Ваш API имеет недостатки.Вы не должны возвращать ResultSets клиентам.Тем самым вы навсегда заставляете своих клиентов полагаться на бэкэнд реляционной базы данных.Ваш уровень доступа к данным должен скрывать все детали того, как ваши данные на самом деле структурированы и хранятся.

Вместо того, чтобы возвращать ResultSet, рассмотрите возможность возврата List или предоставления клиенту возможности предоставить Stream, который ваш компонент доступа к даннымможет писать в.

Это сделает модульные тесты тривиальными для клиентов API и позволит вам менять механизмы хранения по желанию.

1 голос
/ 10 декабря 2010

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

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

1 голос
/ 10 декабря 2010

Как насчет использования HSQLDB для автономных тестов? Он не будет вести себя точно так же, как MySQL DB, но будет быстрым в памяти SQL DB, который должен удовлетворить большинство ваших потребностей.

1 голос
/ 10 декабря 2010

Попробуйте Дерби . Это бесплатный сервер, который вы можете использовать для тестирования, если вы не против менять драйверы, когда возвращаетесь в SqlServer. Вы можете быть ограничены в типе запросов, которые вы можете выполнять, хотя. Я не уверен, имеет ли SqlServer какой-либо специальный синтаксис вне стандартного SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...