Как я тестирую с DBUnit с простым JDBC и HSQLDB, не сталкиваясь с NoSuchTableException?

Я думаю, что Вы должны составить список своих ограничений внешнего ключа, отбросить их, сделать Ваши изменения, затем добавляете ограничения снова. Проверьте документацию на alter table drop constraint и alter table add constraint.

16
задан Community 23 May 2017 в 12:13
поделиться

1 ответ

dbUnit не создает таблицы. Не могло быть и с ограниченной информацией, приведенной в файле XML. Я считаю, что Hibernate может создавать таблицы.

Это одна из причин, по которой я отказался от использования баз данных в памяти и вместо этого попросил администратора базы данных предоставить каждому разработчику собственную базу данных. Затем каждый разработчик поддерживает базу данных в актуальном состоянии с помощью тех же сценариев, которые позже запускаются в реальном времени. Это добавляет небольшие накладные расходы (все разработчики должны поддерживать свои базы данных в актуальном состоянии), но означает, что вам не нужно возиться с построением базы данных для каждого запуска, и вы можете быть уверены, что запросы, выполняемые в ходе тестирования, работают в реальном времени.

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

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


Обновление : 20171115

С тех пор я перешел на использование правил JUnit, которые запускают реальный экземпляр сервера базы данных и что-то вроде FlywayDB для создания базы данных (и с использованием тех же сценариев в реальном времени, что и в тесте, с приложением, ответственным за построение базы данных). Это значительно медленнее, чем использование предварительно созданной базы данных. Однако, используя четко определенные микросервисы (и, таким образом, уменьшая функциональность, требующую тестирования) и очень жестко определяя, какие тесты получают базу данных, вы можете перенести такие проблемы и получить преимущества локальной базы данных, которая всегда соответствует живым.

Увы, это означает, что тестовый разрыв всегда деструктивен, но удачно расположенная точка останова решает эту проблему.

ve с тех пор перешли на использование правил JUnit, которые запускают реальный экземпляр сервера базы данных и что-то вроде FlywayDB для создания базы данных (и с использованием тех же скриптов в реальном времени, что и в тесте, с приложение, отвечающее за построение базы данных). Это значительно медленнее, чем использование предварительно созданной базы данных. Однако, используя четко определенные микросервисы (и, таким образом, уменьшая функциональность, требующую тестирования) и очень жестко определяя, какие тесты получают базу данных, вы можете перенести такие проблемы и получить преимущества локальной базы данных, которая всегда соответствует живым.

Увы, это означает, что Разборка теста всегда деструктивна, но удачно расположенная точка останова решает эту проблему.

ve с тех пор перешли на использование правил JUnit, которые запускают реальный экземпляр сервера базы данных и что-то вроде FlywayDB для создания базы данных (и с использованием тех же скриптов в реальном времени, что и в тесте, с приложение, отвечающее за построение базы данных). Это значительно медленнее, чем использование предварительно созданной базы данных. Однако, используя четко определенные микросервисы (и, таким образом, уменьшая функциональность, требующую тестирования) и очень жестко определяя, какие тесты получают базу данных, вы можете перенести такие проблемы и получить преимущества локальной базы данных, которая всегда соответствует живым.

Увы, это означает, что тестовый разрыв всегда деструктивен, но удачно расположенная точка останова решает эту проблему.

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

Увы, это означает, что Разборка теста всегда деструктивна, но удачно расположенная точка останова решает эту проблему.

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

Увы, это означает, что Разборка теста всегда деструктивна, но удачно расположенная точка останова решает эту проблему.

19
ответ дан 30 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: