gpt4 book ai didi

java - 如何在 junit 中为 Jooq Select Query 编写单元测试

转载 作者:行者123 更新时间:2023-12-04 08:33:35 25 4
gpt4 key购买 nike

 public <Class> getClassbyName(String name) {
private DSLContext context;

return context.selectFrom(Table)
.where(Table.NAME.equal(name))
.fetchOneInto(Class.class);
}
我有这种功能。我需要在 JOOQ 中为这个 Select Query 编写一个单元测试。有谁有想法吗?

最佳答案

测试您的方法的客户
如果您想测试该方法调用者的逻辑,您可以使用第三方库来模拟该方法,例如 mockito .这将允许您生成一组预期的 Class一组已知输入的返回值 String name值。
您还可以集成测试如下所示的所有内容,这适用于您的整个应用程序。
您可以尝试模拟 jOOQ 本身( and jOOQ offers such tooling ),但我强烈建议您不要这样做。迟早,您将实现整个 RDBMS。
测试查询的正确性
如果您想确保您的查询本身是正确的并且不会产生例如不需要的笛卡尔积或 null值等,您应该运行集成测试。
理想情况下,您的集成测试尽可能接近您的生产环境。例如,如果您使用的是 PostgreSQL,那么您应该在具有已知数据集的实际 PostgreSQL 实例上运行此查询。运行此类测试的一个很好的实用程序是 testcontainers ,但还有其他方法可以针对实际数据库实例自动测试。
一种不太推荐的方法(但如果您的查询很简单,可能会更快更方便)是在内存数据库上运行集成测试,例如 H2 .这更快,但价格高:

  • 您不能再使用生产数据库产品的供应商特定功能
  • 您必须将数据库架构调整为生产数据库和测试数据库之间支持的最小公分母,例如数据类型等

  • 但是,如果您的应用程序支持多个生产数据库产品,则这是一个可行的选择,在这种情况下,无论如何上述两个警告都是您在生产中遇到的问题。
    不过,我仍然会在大多数测试中使用 testcontainers。这是一个快速示例,说明使用 testcontainers 设置代码生成是多么容易,例如: https://github.com/jOOQ/jOOQ/tree/main/jOOQ-examples/jOOQ-testcontainers-example

    关于java - 如何在 junit 中为 Jooq Select Query 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64910410/

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