Есть ли способ, где мы можем протестировать Postgres запросов Jsonb, используя встроенную базу данных для модульного тестирования? - PullRequest
1 голос
/ 27 января 2020

Я хочу провести модульное тестирование. В Java Spring-boot Postgres собственный запрос для типа данных jsonb, не затрагивая реальную базу данных. Вместо этого используется некоторая встроенная база данных или другой подход, но встроенные базы данных, такие как H2, не поддерживают Postgres jsonb speci c операторы типа ->>, #>> et c.

Есть ли способ, которым я могу это сделать? Пожалуйста, также предложите любой другой подход к тому же.

Пример запроса:

@Query(value = "SELECT * FROM table WHERE column ->> 'Id'=?1", nativeQuery = true)
public Entity fertchById(String id);

1 Ответ

0 голосов
/ 27 января 2020

, если вы используете базу данных H2 и хотите работать с функцией JSONB PostgreSQL без использования docker и тест-контейнеров (которые упоминались в комментариях), вы можете определить свой собственный диалект H2.

Я нашел пример такого диалекта здесь :

public class CustomH2Dialect extends H2Dialect {

    public CustomH2Dialect() {
        this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
    }


    @Override
    public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
        super.contributeTypes(typeContributions, serviceRegistry);
        typeContributions.contributeType(new JsonStringType(), "jsonb");
    }
}

Как вы видите, проблема с Liquibase все еще открыта, и вам определенно следует подумать о testcontainers или другом способ работы с PostgreSQL напрямую.

...