Замена h2 в бд памяти при модульном тестировании

Итак, это первый раз, когда я пытаюсь написать модульный тест для моего приложения sping-boot на java (это кажется удивительным, но да: D).

Я пытался использовать h2 db для своего модульного теста, но я понял, что есть некоторые ограничения для этого в db памяти. Когда я пытаюсь запустить свои модульные тесты. Это показывает мне ошибку вроде.

2018-10-31 15:32:21.796 [] [] [Test worker] ERROR org.hibernate.tool.hbm2ddl.SchemaExport :485 - Unknown data type: "JSON"; SQL statement:

Я сразу перескочил в гугл, как это возможно, потом обнаружил, что h2 db не поддерживает поля JSON. Хотя есть некоторые обходные пути для пропуска данных JSON, но поскольку я использую @Type, я не могу использовать обходные пути, такие как переход на текст или что-то в этом роде.

Мне любопытно, есть ли какой-либо другой метод, который я могу использовать для завершения модульного тестирования, используя какой-либо другой в памяти db.

Какая у вас производственная СУБД? Проще говоря: вы не можете заменить одну базу данных другой и ожидать, что все будет работать. Помимо полей JSON, существует множество отличий, с которыми вы можете столкнуться.

Serg M Ten 31.10.2018 12:08

производственная СУБД - это mysql

Geek_To_Learn 31.10.2018 13:00

@SergMTen зависит от объема набора тестов. Пока вы не используете специфичные для движка вещи, H2 является прекрасной заменой для модульных тестов, требующих некоторой формы хранения данных, особенно для кода JPA и Hibernate.

jwenting 31.10.2018 13:21

Что ж, уже есть проблемы с полями JSON, так что кто знает, сколько еще функций, специфичных для MySQL, используется? Если возможно, я бы посоветовал для тестирования переключить MySQL на движок INMEMORY с помощью CREATE TABLE tablename (...) ENGINE = MEMORY, иначе MariaDBj может быть другим вариантом. Наконец, если вы все еще собираетесь использовать H2, добавьте MODE = MySQL в компонент источника данных <property name="url" value="jdbc:h2:mem:mydb;MODE=MySQL;" />.

Serg M Ten 31.10.2018 14:01

Не уверен, что это идеальное решение, но я нашел способ использовать типы данных JSON в H2. Я добавил INIT = создать домен, если не существует json в качестве другой строки, и сейчас он работает.

Geek_To_Learn 31.10.2018 15:07

Почему бы вам не использовать интеграционный тест на основе докеров? Проверить здесь

Ravi Parekh 15.09.2021 15:34
1
6
898
0

Другие вопросы по теме