Как получить тесты 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 для каждого нового сеанса.)