フラッシュモード@DataJpaTest
を使用するためにどのようにSpringテストを取得しCOMMIT
ますか?これは私のSpockユニットテストでは機能しません。
@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
in MyConfiguration
を追加するなどのハックを試しsetFlushMode()
ましたentityManager
が、それも機能しません。テストが実行されるまでに、テストはAUTO
フラッシュモードに戻りました。(新しいセッションごとにAUTOに戻ると思います。)
質問を投稿する前にこれを試すべきだったのですが、最近修正された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では、v2.2.2のspring.jpa.properties.org.hibernate.flushMode
ように、私のテストでは無視されません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加