Использование базы данных SQL для запуска тестов в Jhipster

Я настроил свойства приложения test для использования Postgresql. Вроде бы все тесты работают, но это не совсем правильно.

Когда я выполняю настоящие постоянные тесты данных, данные не сохраняются в базе данных postgresql, даже если запущена liquibase.

Соответствующий раздел application.yml, который я настроил с помощью postgresql.

spring:
    application:
        name: stackoverflow
    jackson:
        serialization.write_dates_as_timestamps: false
    cache:
        type: none
    datasource:
            type: com.zaxxer.hikari.HikariDataSource
            url: jdbc:postgresql://127.0.0.1:5432/store_test?user=postgres
    jpa:
        database-platform: io.github.jhipster.domain.util.FixedPostgreSQL82Dialect
        database: POSTGRESQL
        show-sql: false
        generate-ddl: false
        hibernate:
          ddl-auto: none
        properties:
            hibernate.id.new_generator_mappings: true
            hibernate.cache.use_second_level_cache: false
            hibernate.cache.use_query_cache: false
            hibernate.generate_statistics: true

Как правило, существует метод createEntity, скажем, для Entity Company.

я пытался

em.persist(company)
em.flush(company)

также

companyRepository.saveAndFlush(company)

Чего мне не хватает, чтобы заставить JHipster исправить тест с реальной базой данных или если я неправильно сохраняю данные.


person Abhishek Dujari    schedule 17.01.2018    source источник
comment
Покажите код, который вы используете для записи данных и проверки их наличия или отсутствия в базе данных.   -  person Jens Schauder    schedule 17.01.2018
comment
По умолчанию тесты, сгенерированные JHipster, имеют аннотацию @Transactional, поэтому изменение данных откатывается.   -  person Gaël Marziou    schedule 17.01.2018
comment
Это то, что я понимаю, но когда я делаю точку останова в середине теста, я вижу, что вся таблица отсутствует, а затем она воссоздается после выполнения конкретного модульного теста. Когда я делаю собственный запрос, он не возвращает данных, но запросы Jpa, похоже, работают.   -  person Abhishek Dujari    schedule 17.01.2018
comment
Ваш собственный запрос выполняется в той же транзакции? Я сомневаюсь в этом, поэтому он не может прочитать ваши данные, даже когда приложение остановлено в точке останова. Вот как я понимаю изоляцию.   -  person Gaël Marziou    schedule 17.01.2018
comment
Я не понял этого утверждения и того, как оно применяется. Можем ли мы поговорить о Gitter?   -  person Abhishek Dujari    schedule 17.01.2018
comment
Я закончил использовать файл .sql и использовать выполнение SQl в тесте @Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD,scripts = "classpath:importdata.sql"). Вот как я смог протестировать nativeQuery и получить объекты в базе данных. Все остальные тесты не создают объекты в БД (возможно, в памяти?), но они, кажется, проходят.   -  person Abhishek Dujari    schedule 25.01.2018
comment
Я изменил файл тестовых свойств, чтобы использовать postgres, как и вы, но все еще выдает мне ошибки в liquibase с базой данных h2. Изменил ли что-нибудь еще? @AbhishekDujari   -  person Ahmed E. Eldeeb    schedule 07.05.2019
comment
Прошло некоторое время, но этот метод применим только к postgresql, и я запускаю настоящие собственные запросы sql. Вы не можете использовать с ним H2, если не измените запросы на запросы h2. У меня нет доступа к этому коду, так как я покинул этот проект более года назад. Однако он отлично работал в запущенных тестах.   -  person Abhishek Dujari    schedule 11.05.2019


Ответы (1)


как сказал @gaël-marziou. По умолчанию тесты, созданные JHipster, аннотируются @Transactional, поэтому изменение данных откатывается. Вы должны @Commit аннотировать tetMethod, чтобы предотвратить его rollback

person Nurlan    schedule 28.03.2018
comment
да, в этом он прав. Но даже без транзакций и вызова фиксации фактические данные не записываются в БД. Только hibernate признает это. Я довольно новичок в Java/Spring и, исходя из Python/Rails, я ожидал, что данные будут фактически записаны в БД, чтобы я мог выполнять собственные запросы. Это было не так. Вы хотите сказать, что мое понимание неверно? - person Abhishek Dujari; 29.03.2018
comment
Да, без @Transactional он должен сохранять данные, могут быть некоторые случаи, которые делают ваш тест транзакционным (суперкласс, какая-то конфигурация xml, я не уверен)?! Я сделал то же самое, попробовал flush,update, save! Мой класс аннотировал @Transactional, а метод аннотировал @Commit, после того как этот тестовый метод оставляет данные, сохраненные в db. - person Nurlan; 30.03.2018