JTA: как тестировать JMS и JDBC сбои? - PullRequest
0 голосов
/ 06 декабря 2009

В настоящее время мы работаем над тестированием поведения сбоев JTA в системе, которая получает сообщения с использованием JMS, сохраняет их и отправляет результаты с использованием другого класса.

Все это связано вместе с помощью Spring. Текущие модульные тесты используют HSQLDB, Apache ActiveMQ и Bitronix для управления транзакциями. Успех в этом был ограничен, главным образом потому, что HSQLDB не реализует транзакции XA.

Итак, вот вопрос: как лучше всего симулировать сбои базы данных в модульном тесте транзакции? Есть ли способ заставить стандартный драйвер JDBC (скажем, для Oracle) дать сбой в середине теста?

n.b. нажатие кнопки питания не является повторяемым тестом:)

Ответы [ 2 ]

3 голосов
/ 06 декабря 2009

Вам нужно решить, что именно вы хотите протестировать - например, если вы хотите проверить, как Oracle будет вести себя в транзакции XA с Bitronix, то имитация DAO, как предлагает duffymo, вам не поможет. В таком случае вам нужно найти способ разорвать соединение в середине транзакции, а затем посмотреть, как Bitronix / Oracle будет обрабатывать восстановление - например, эвристические результаты и т. д.

Обратите внимание, что во многих случаях есть способы получить ту же функциональность без фактического использования транзакций XA. Это может быть проще, быстрее и более проверяемым. Например, в очень распространенном случае, когда сообщения принимаются из MOM и DML, выполняемых в базе данных, существует общая схема того, как обходиться без XA, даже если обновляются два менеджера ресурсов.

1 голос
/ 06 декабря 2009

Напишите фиктивный объект для теста, реализация которого выдает исключение в середине транзакции.

Поскольку вы используете Spring, легко написать новую реализацию интерфейса DAO, предназначенную только для тестирования, которая будет вести себя воспроизводимым и предсказуемым образом. Внедрить «вонючую DAO» только для теста.

Конечно, вы используете драйвер XA для подключения к базе данных. Двухфазная фиксация не будет работать иначе.

...