Преобразование `@UsingDataSet` в `@Sql`

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

Но как мне это делать?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме