Java 如何在junit中编写Jooq Select查询的单元测试 publicGetClassByName(字符串名){ 私人语境; 返回上下文。选择从(表) .其中(表.名称.相等(名称)) .fetchOneInto(Class.Class); }

Java 如何在junit中编写Jooq Select查询的单元测试 publicGetClassByName(字符串名){ 私人语境; 返回上下文。选择从(表) .其中(表.名称.相等(名称)) .fetchOneInto(Class.Class); },java,jdbc,junit,junit4,jooq,Java,Jdbc,Junit,Junit4,Jooq,我有这种功能。我需要在JOOQ中为这个Select查询编写一个单元测试。有人知道吗?测试您的方法的客户端 如果您想测试该方法调用方的逻辑,您可以使用第三方库模拟该方法,如。这将允许您为一组已知的输入字符串名称值生成一组预期的类返回值 您还可以按如下所示对整个应用程序进行集成测试 您可以尝试模拟jOOQ本身(),但我强烈建议您不要这样做。迟早,您将实现一个完整的RDBMS 测试查询的正确性 如果您希望确保查询本身是正确的,并且不会产生不需要的笛卡尔积或null值等,则应运行集成测试 理想情况下,集

我有这种功能。我需要在JOOQ中为这个Select查询编写一个单元测试。有人知道吗?

测试您的方法的客户端 如果您想测试该方法调用方的逻辑,您可以使用第三方库模拟该方法,如。这将允许您为一组已知的输入
字符串名称
值生成一组预期的
返回值

您还可以按如下所示对整个应用程序进行集成测试

您可以尝试模拟jOOQ本身(),但我强烈建议您不要这样做。迟早,您将实现一个完整的RDBMS

测试查询的正确性 如果您希望确保查询本身是正确的,并且不会产生不需要的笛卡尔积或
null
值等,则应运行集成测试

理想情况下,集成测试尽可能靠近生产环境。例如,如果您使用的是PostgreSQL,那么您应该在具有已知数据集的实际PostgreSQL实例上运行此查询。运行此类测试的一个很好的实用工具是,但也有其他方法可以针对实际数据库实例自动化测试

一种不太推荐的方法(但如果查询简单,可能会更快更方便)是在内存中的数据库上运行集成测试,例如。速度更快,但价格很高:

  • 您不能再使用生产数据库产品的特定于供应商的功能
  • 您必须将数据库模式调整为生产数据库和测试数据库之间支持的最小公分母,例如数据类型等
但是,如果您的应用程序支持多个生产数据库产品,那么这是一个可行的选择,在这种情况下,上述两个注意事项是您在生产中遇到的问题


不过,我仍然会在大多数测试中使用testcontainers。

您想测试什么?此方法的调用方?还是查询的正确性?我需要检查呼叫者和正确性。
 public <Class> getClassbyName(String name) {
     private DSLContext context;
    
     return context.selectFrom(Table)
                   .where(Table.NAME.equal(name))
                   .fetchOneInto(Class.class);
}