Преобразовать `@ UsingDataSet` в` @ Sql` - PullRequest
2 голосов
/ 18 апреля 2019

Я переношу приложение из 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{
}

Я хотел бы создать вспомогательный "тестовый" класс

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

Как мне, , сделать , хотя?

Любой способ подключиться к hibernate и получить операторы, сгенерированные для определенного метода (и операторы только и только для этого одного метода)?

1 Ответ

1 голос
/ 18 апреля 2019

Какое отношение имеет Arquillian к Hibernate? Я думаю, что он использует DBUnit для заполнения базы данных из YAML.

Что вы можете сделать, это использовать драйвер p6spy (https://github.com/p6spy/p6spy) JDBC), запустить фиктивный тест для каждого файла YAML и получить все операторы SQL из журналов p6spy.

...