Я переношу приложение с 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`
}
}
Но как мне это делать?
Любой способ подключиться к спящему режиму и получить операторы, сгенерированные для определенного метода (и только операторы и только для этого одного метода)?




Какое отношение Arquillian имеет к Hibernate? Я думаю, что он использует DBUnit для заполнения базы данных из YAML.
Что вы можете сделать, так это использовать драйвер JDBC p6spy (https://github.com/p6spy/p6spy), запустить фиктивный тест для каждого файла YAML и получить все операторы SQL из журналов p6spy.