java - 将 `@UsingDataSet` 转换为 `@Sql`
问题描述
我正在将应用程序从 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`
}
}
不过,我该怎么做呢?
有什么方法可以挂钩休眠并获取为特定方法生成的语句(以及仅且仅针对该方法的语句)?
解决方案
Arquillian 与 Hibernate 有什么关系?我认为它使用 DBUnit 从 YAML 为数据库播种。
您可以使用p6spy ( https://github.com/p6spy/p6spy ) JDBC 驱动程序,为每个 YAML 文件运行模拟测试并从 p6spy 日志中获取所有 SQL 语句。
推荐阅读
- ios - IAP IOS 如何添加自定义定价?
- php - 如何在赫斯提亚主题中显示自定义字段
- node.js - 在 OAuth 重定向 URI 中设置标头
- ruby-on-rails - 在rails中提取i18n的表单标签
- wso2 - WSO2 EI 新的 xml 标签使用 Enrich 调解器和当 xml 标签动态获取时
- python - xPath 似乎没有转到下一页
- python - 在哪里运行 heroku ps:scale web=1?
- javascript - 如何将 2 个数组值映射/循环到带有 href 和文本的锚标记?
- oracle10g - 如何从 Pentaho Spoon 读取 PLSQL 存储过程的参数
- java - 无法使用 OpenJDK16 从 Geoserver 加载图层