如何在junit中编写Jooq Select Quary的单元测试

解码器
public <Class> getClassbyName(String name){
 private DSLContext context;
    
    return context.selectFrom(Table)
                   .where(Table.NAME.equal(name))
                   .fetchOneInto(Class.class);
} 

我有这种功能。我需要为此JOOQ中的“选择查询”编写一个单元测试。有人有什么主意吗?

卢卡斯·埃德(Lukas Eder)

测试您的方法的客户

如果要测试该方法的调用者的逻辑,则可以使用第三方库(例如mockito)来模拟该方法这将允许您Class为一组已知的输入String name生成一组期望的返回值。

您还可以集成测试所有适用于整个应用程序的内容,如下所示。

您可以尝试模拟jOOQ本身(并且jOOQ提供了这样的工具),但是我强烈建议您反对它。很快,您将实现整个RDBMS。

测试查询的正确性

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

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

不推荐使用的方法(但如果查询简单,则更快或更方便)是在内存数据库(例如H2)上运行集成测试这更快,但是价格很高:

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

但是,如果您的应用程序支持多个生产数据库产品,那么一个可行的选择,在这种情况下,无论如何上述两个警告都是您在生产中遇到的问题。

不过,我还是会在大多数测试中使用testcontainer。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章