将`@ UsingDataSet`转换为`@ Sql`

时间:2019-04-18 13:32:23

标签: java hibernate spring-boot kotlin jboss-arquillian

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

我们的某些集成测试使用的是Arquillian及其@UsingDataSet批注,它们非常方便地使您可以使用yaml指定数据结构。

可悲的是,我不认为SpringBoot支持“ yaml-injections”,但它确实提供了一个@Sql注释,期望-惊喜-sql文件。

现在,我不想用SQL重写测试数据。这很麻烦,我不想花几个小时调试SQL,因为我溜达了。

当然,理想情况下,我们将完全摆脱yaml / sql文件,选择使用jOOQ,然后从代码中填充测试数据库。

不过,不确定是否可以通过合理的努力实现。

让我们假设无法重写代码,并且我们有这样的集成测试

@RunWith(Arquillian::class)
@UsingDataSet("foo.yml","bar.yml","baz.yml")
class MyBloodyIT{
}

我想创建一个辅助的“测试”类

@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`
    }
}

我怎么这样做呢?

有什么方法可以进入休眠状态并获取为特定方法生成的语句(以及仅适用于该方法的语句)?

1 个答案:

答案 0 :(得分:1)

Arquillian与Hibernate有什么关系?我认为它使用DBUnit从YAML播种数据库。

您可以做的是使用 p6spy https://github.com/p6spy/p6spy)JDBC驱动程序,为每个YAML文件运行一个模拟测试,并从p6spy日志中获取所有SQL语句。