Java 将“@UsingDataSet”转换为“@Sql”`

Java 将“@UsingDataSet”转换为“@Sql”`,java,hibernate,spring-boot,kotlin,jboss-arquillian,Java,Hibernate,Spring Boot,Kotlin,Jboss Arquillian,我正在将一个应用程序从Thorntail迁移到Spring Boot 我们的一些集成测试使用Arquillian及其@UsingDataSet注释,这非常方便,让您可以在yaml中指定数据结构 遗憾的是,我认为SpringBoot不支持“yaml注入”,但它确实提供了一个@Sql注释,该注释期望——出乎意料地——Sql文件 现在我不想在SQL中重写测试数据。这很麻烦,我也不想花几个小时调试SQL,因为我在某个地方出了差错 当然,在理想情况下,我们将完全摆脱yaml/sql文件,选择(比如)jOO

我正在将一个应用程序从Thorntail迁移到Spring Boot

我们的一些集成测试使用Arquillian及其
@UsingDataSet
注释,这非常方便,让您可以在yaml中指定数据结构

遗憾的是,我认为SpringBoot不支持“yaml注入”,但它确实提供了一个
@Sql
注释,该注释期望——出乎意料地——Sql文件

现在我不想在SQL中重写测试数据。这很麻烦,我也不想花几个小时调试SQL,因为我在某个地方出了差错

当然,在理想情况下,我们将完全摆脱yaml/sql文件,选择(比如)jOOQ,并从代码中填充测试数据库

不过,目前还不确定通过合理的努力是否可行

让我们假设在代码中重写不是一个选项,我们有一个这样的集成测试

@RunWith(Arquillian::class)
@UsingDataSet("foo.yml","bar.yml","baz.yml")
class MyBloodyIT{
}
我想创建一个辅助的“test”类

但是我该怎么做呢


有没有办法挂接到hibernate并获取为特定方法生成的语句(以及仅为该方法生成的语句)?

Arquillian与hibernate有什么关系?我认为它使用DBUnit从YAML中为数据库种子

您可以使用p6spy()JDBC驱动程序,对每个YAML文件运行模拟测试,并从p6spy日志中获取所有SQL语句

@RunWith(Arquillian::class)
class MyBloodySQLDumpIT{

    @Test
    @UsingDataSet("foo.yml")
    fun dumpFoo(){
        // dump hibernate-generated SQL statements to `foo.sql`
    }

    @Test
    @UsingDataSet("bar.yml")
    fun dumpFoo(){
        // dump hibernate-generated SQL statements to `bar.sql`
    }

    @Test
    @UsingDataSet("baz.yml")
    fun dumpFoo(){
        // dump hibernate-generated SQL statements to `baz.sql`
    }
}