Заглушка SQL-сервера для Java - PullRequest
5 голосов
/ 14 февраля 2011

У меня есть Java-приложение, которое использует MSSQL-сервер через драйвер JDBC. Есть ли какая-нибудь заглушка, которую я могу использовать для тестирования? Например, я хочу проверить, как мое приложение обрабатывает случаи ошибок подключения, SQL-сервера на диске и других исключений. Имитировать это на реальном сервере SQL довольно сложно и сложно.

Спасибо

Ответы [ 6 ]

1 голос
/ 05 июля 2011

Я не думаю, что что-то подобное.
Вам лучше настроить собственную базу данных и протестировать ее на своей машине / локальной сети.

Все, что я знаю, есть:

Оба поддерживают MySQL, но не MS-SQL.Я думаю, что это связано с лицензионными вопросами и ограничениями.Поэтому я боюсь, что вы не найдете подобный сервис для MS-SQL db.

1 голос
/ 05 июля 2011

Вы можете (предполагая, что система спроектирована таким образом, чтобы упростить эту задачу) создать свои собственные версии классов доступа к БД (я предполагаю, что вы используете интерфейсы операторов / подготовленного состояния), которые будут содержать реальные вызовы БД и что Вы можете изменить, чтобы сделать именно то, что вы хотите.

Я сделал это - это займет день или около того очень скучной работы.

1 голос
/ 14 февраля 2011

Вы можете написать модульные тесты для ваших DAO s или репозиториев, возвращающих фиктивные Connection объекты с использованием фиктивной библиотеки, такой как https://mocquer.dev.java.net/.

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

0 голосов
/ 06 июля 2011

выполнить процедуру sp_who2, она сгенерирует все текущие соединения и обработает в вашей базе данных. Вы можете увидеть столбец с именем spid, соответствующий каждому соединению базы данных.просто наберите: kill <<spid>> и выполните его, чтобы прекратить работу любых пользователей .. и т. д.но если spid меньше 50, это означает, что это системный процесс и его не убивают.Это может помочь вам воспроизвести разрывы соединения.Вы также можете сказать ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK_IMMEDIATE, что немедленно прервет все соединения с указанным БД.

Select @@MAX_Connections as Max_Connections даст вам максимальное количество соединений, которые можно установить с базой данных (вы можете установить его на меньшее число, чтобыпроверить недоступность соединения).

для репликации тайм-аута запроса. установите для тайм-аута запроса очень низкое число и выполните довольно большой запрос.

для создания ошибки дискового пространства, просто измените размерфайл БД и не позволяйте ему расти ... затем вставьте данные в базу данных (вы получите исключение).

altert database xxx (file= maxsize= filegrowth=)

0 голосов
/ 06 июля 2011

Если вы используете что-то отличное от MS-SQL, у вас может возникнуть больше проблем с тестированием из-за несовместимости и отсутствия функциональности (например, транзакций), чем вы решаете. Так что я с Карлом - используйте прокладку.

Если вы искали охват обычного поведения модульным тестом, я мог бы подумать иначе.

Я не использовал их лично, но материал, о котором вы говорите, звучит как действительно подходящий для насмешливого фреймворка, такого как Mockito ( документы ) или PowerMock , Похоже, они обеспечивают хорошую поддержку для того типа инъекции, который вам нужен. Может ли кто-то с опытом работы с любым из них (или схожим) взвесить? См. Также Как подготовить / смоделировать JDBC ResultSet для работы с Java 5 и 6?

0 голосов
/ 06 июля 2011

Отвечая на вопрос, о котором я подумала, я буду рада услышать ваши отзывы. После обхода я попал в HyperSQLDB , базу данных, реализованную на Java. Как вы думаете, возможно ли взять исходный код HSQLDB и добавить к нему еще один слой, чтобы я мог контролировать его и вводить в него предопределенные поведения. Например, я сделаю так, чтобы все запросы выполнялись медленно, я отключу и т. Д.

Как вы думаете, стоит ли продолжать эту идею? Это выполнимо в разумные сроки?

...