Изменить режим flu sh в тестах Spring Boot, когда используется @DataJpaTest? - PullRequest
0 голосов
/ 29 апреля 2020

Как получить тесты Spring, используя @DataJpaTest для использования режима COMMIT flu sh? Это не работает для моих модульных тестов Спока:

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest(properties = "spring.jpa.properties.org.hibernate.flushMode=COMMIT")
class MyJpaTestSpec extends Specification {
    @Autowired
    EntityManager entityManager

    def "test flush mode"() {
        expect:
        // confirming that flushMode is still AUTO even though I configured COMMIT
        entityManager.flushMode == FlushModeType.AUTO
    }
}

entityManager.getFlushMode() продолжает возвращаться AUTO.

Это с Spring Boot 2.2.2 с зависимостью от spring-test : 5.2.2.RELEASE.

У меня также есть класс конфигурации:

@AutoConfigurationPackage
@SpringBootConfiguration
class MyConfiguration {
}

И src/test/resources/application.yml (Gradle), кажется, читается, потому что определенные конфигурации выбираются (такие как источник данных), но свойство spring.jpa.properties.org.hibernate.flushMode, по-видимому, игнорируется в файле конфигурации при выполнении тестов @DataJpaTest.

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1
    username: sa
    password: sa
  jpa:
    # seems to be ignored for @DataJpaTests
    properties:
        org.hibernate.flushMode: COMMIT

Я пробовал взломать, например, добавив @PostConstruct в MyConfiguration позвонить setFlushMode() на entityManager, но это тоже не работает. Ко времени запуска теста он возвращается в режим AUTO flu sh. (Я предполагаю, что он возвращается к AUTO для каждого нового сеанса.)

1 Ответ

0 голосов
/ 29 апреля 2020

Я должен был попробовать это еще до того, как опубликовать вопрос, но оказалось, что это ошибка Spring, которая недавно была исправлена. Я обновился до Spring Boot v2.2.6 (который использует spring-test v5.2.5). Когда я отправил свой вопрос, я использовал Spring Boot v2.2.2. Обновление с v2.2.2 до v2.2.6 решило проблему. На v2.2.6 spring.jpa.properties.org.hibernate.flushMode не игнорируется в моем тесте, как это было с v2.2.2.

...