春季/休眠测试:创建DDL后插入测试数据
-
25-09-2019 - |
题
我有一个 Spring/Hibernate Web 应用程序,它有一些在内存 HSQL 数据库上运行的集成测试。Hibernate 使用这个空白数据库并通过 hbm2ddl=create 创建我的所有测试表和约束。但是,我有一个新的 bean,它在 afterPropertiesSet() 方法期间检查数据库中的特定配置值,因此当初始化此 bean 时,数据库中需要存在这样的行。
有没有什么好方法来设置与 Rail 的测试装置等效的 Java/Spring/Hibernate?我试图找到一种方法来告诉 Hibernate“每当您创建此表时,请立即插入这些行”。我找不到可以添加的回调或挂钩,但也许还有另一种方法。
解决方案
我试图找到一种方式让Hibernate“只要你创建该表,插入这些行之后立即”
由于休眠3.1,您可以包含一个名为import.sql
在Hibernate中的运行时类路径和模式导出的文件时,Hibernate将执行包含在该文件中的架构已出口后的SQL语句。
import.sql:在单元测试中容易导入数据
Hibernate有一个整洁的小特征 这在很大程度上下,记录并 未知。您可以执行一个SQL脚本 在
SessionFactory
创建过程中 数据库模式之后 一代又在一个新的进口数据 数据库。你只需要添加一个文件 在classpath命名import.sql
根和集要么create
或create-drop
为您hibernate.hbm2ddl.auto
属性。我用它的休眠搜索在 现在采取行动,我已经开始 查询章节。它初始化我 数据库,支持一组新数据 我的单元测试。 JBoss Seam的也使用它 很多在各种实例。
import.sql
是一个非常简单的功能 但在时间非常有用。记得 该SQL可能是依赖于 你的数据库(可移植性啊!)。#import.sql file delete from PRODUCTS insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...'); insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
有关的更多信息 功能,请的Eyal的博客,他 写一个关于它的可爱的小项。 请记住,如果你想添加额外的 数据库对象(索引,表和 等等),你也可以使用辅助 数据库对象特征。
有还没有真正记录。
其他提示
在冬眠3.6,其允许运行任意SQL命令的配置是:
hibernate.hbm2ddl.import_files
请参阅在 http://docs.jboss.org /hibernate/core/3.6/reference/en-US/html_single/ 时,注意到有所述文档中的错误:属性是import_files,与端部一个s
。如果您正在谈论 JUnit 测试并使用 AbstractTransactionalDataSourceSpringContextTests 你可以重写一些方法,比如 交易前设置 提供一个钩子来预填充测试表数据等。