gpt4 book ai didi

java - 使用JOOQ创建测试用数据库

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:40 25 4
gpt4 key购买 nike

首先,JOOQ 非常棒,它为我节省的时间比我想说的还要多。最近我一直在研究使用 JOOQ 进行测试,并且有一个很棒的 MockResult 和相关类用于模拟来自数据库的结果。但当然,测试 DB 层的一个挑战是在某些时候您必须知道查询是否真的有效。

作为 JOOQ,在生成类时,有效地拍摄了您的数据库的快照,为什么我们不能使用它来重新创建数据库以进行测试?例如,启动内存中的数据库并运行 createDatabase() 或 getTableSql() 类型的命令。所以我的问题是有没有人知道用 JOOQ 可以实现的方法?

通过这样的设置,JOOQ 可以传授它对数据库结构的了解,尽管减去索引和其他细节,然后可以测试查询。当然我有数据库部署脚本,但这将允许一个纯基于 java 的解决方案。毕竟,如果数据库发生变化,您无论如何都需要重新生成 JOOQ,所以为什么不从该快照开始工作。

除此之外,我已经有一个在应用程序启动时运行的 checkDatabase() 命令,该命令循环遍历 JOOQ 表和字段以验证它们是否全部存在,如果部署应用程序的环境不匹配则抛出异常最后拍摄的 JOOQ 快照。

最佳答案

问题 #3160 已针对 jOOQ 3.8 实现

有了这个,你可以运行(例如):

for (Query query : 
DSL.using(SQLDialect.H2, new Settings().withRenderFormatted())
.ddl(T_BOOK)
.queries()) {
System.out.println(query + ";\n");
}

... 将打印(例如):

create table "PUBLIC"."T_BOOK"(
"ID" int not null,
"AUTHOR_ID" int not null,
"CO_AUTHOR_ID" int null,
"DETAILS_ID" int null,
"TITLE" varchar(400) not null,
"PUBLISHED_IN" int not null,
"LANGUAGE_ID" int not null,
"CONTENT_TEXT" clob null,
"CONTENT_PDF" blob null,
"REC_VERSION" int null,
"REC_TIMESTAMP" timestamp null,
constraint "PK_T_BOOK"
primary key ("ID"),
constraint "FK_T_BOOK_AUTHOR_ID"
foreign key ("AUTHOR_ID")
references "PUBLIC"."T_AUTHOR" ("ID"),
constraint "FK_T_BOOK_CO_AUTHOR_ID"
foreign key ("CO_AUTHOR_ID")
references "PUBLIC"."T_AUTHOR" ("ID"),
constraint "FK_T_BOOK_LANGUAGE_ID"
foreign key ("LANGUAGE_ID")
references "PUBLIC"."T_LANGUAGE" ("ID")
);

关于java - 使用JOOQ创建测试用数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22729855/

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