public <Class> getClassbyName(String name){
private DSLContext context;
return context.selectFrom(Table)
.where(Table.NAME.equal(name))
.fetchOneInto(Class.class);
}
我有这种功能。我需要为此JOOQ中的“选择查询”编写一个单元测试。有人有什么主意吗?
如果要测试该方法的调用者的逻辑,则可以使用第三方库(例如mockito)来模拟该方法。这将允许您Class
为一组已知的输入String name
值生成一组期望的返回值。
您还可以集成测试所有适用于整个应用程序的内容,如下所示。
您可以尝试模拟jOOQ本身(并且jOOQ提供了这样的工具),但是我强烈建议您反对它。很快,您将实现整个RDBMS。
如果要确保查询本身是正确的并且不会产生不想要的笛卡尔积或null
值等,则应运行集成测试。
理想情况下,您的集成测试应尽可能接近您的生产环境。例如,如果您使用的是PostgreSQL,则应在具有已知数据集的实际PostgreSQL实例上运行此查询。testcontainers是运行此类测试的一个很好的实用工具,但是还有其他方法可以针对实际的数据库实例自动执行测试。
不推荐使用的方法(但如果查询简单,则更快或更方便)是在内存数据库(例如H2)上运行集成测试。这更快,但是价格很高:
但是,如果您的应用程序支持多个生产数据库产品,那么这是一个可行的选择,在这种情况下,无论如何上述两个警告都是您在生产中遇到的问题。
不过,我还是会在大多数测试中使用testcontainer。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句