gpt4 book ai didi

hibernate - 对于 TestNG,当使用 Hibernate 查询包含复杂模型的数据源时,预填充数据源的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 23:00:30 25 4
gpt4 key购买 nike

我希望为我们基于 Seam Framework 的网站的内部搜索引擎编写测试,该引擎使用 Hibernate + Lucene 索引(在 DB2 上)进行查询。当项目的数据模型非常复杂(考虑到实体关系和字段约束)时,在运行 TestNG 套件之前填充数据源的最佳解决方案是什么?对于某些测试用例,至少有十几个数据库表需要彼此相关的行,以便遵守数据模型的约束。理想情况下,应使用 Hypersonic,因为内存使用将缩短构建过程的运行时间。

希望我的问题很清楚,因为如果不抛出大量描述性文本和专有代码,很难对我的问题形成完整的描述。基本上,考虑到我们已经编写的数据模型和 populate.sql 脚本,以编程方式创建每个实体(通过 Hibernate 的 Home 对象实例化所有对象、设置每个属性、持久化到数据源并在 FacesRequest @Test 中提交事务)太笨重了(并且在 DB2 上执行以在本地运行 JBoss 托管的网站)无法在 Hypersonic 上使用!我在网上或书中遇到的每个 TestNG 示例都包含极其简单的数据集,这些数据集并没有表明解决我的问题的明确方法。

最佳答案

要创建复杂的数据,同时隐藏复杂的设置,我的建议是使用描述为 here 的构建器模式。它允许您创建类似的东西

Person person = PersonBuilder.validPerson()
.withAddress(AddressBuider.validAddress())
.build();

关于 h2 和 db2 互操作性。最先进的 POJO in Action 书中说

One challenge when using an in-memory database is ensuring that its schema is identical to the production database’s schema. This isn’t a problem if the ORM framework generates the database schema. However, if the production database schema is maintained separately, then its definition might not be compatible with the in-memory database. It could, for example, use vendor-specific data types and other features. In order to use an in-memory database, you will need to use a different schema definition or generate its schema from the ORM. In either case, there is no guarantee that the in-memory database has the same schema as the production database.

虽然你的问题涉及高超音速,H2功能包括

  • IBM DB2、Apache Derby、HSQLDB、MS SQL Server、MySQL、Oracle 和 PostgreSQL 的兼容模式。

也许它可以解决你想要的问题。尝试一下。

可以使用不同的方法来填充测试所需的数据。 XUnit Fixture Setup Patterns 解释了一个有用的指南。 .

其他可以帮助您的工具是

关于hibernate - 对于 TestNG,当使用 Hibernate 查询包含复杂模型的数据源时,预填充数据源的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3919613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com