Hibernate maven数据库层模块中的单元测试和集成测试划分

Hibernate maven数据库层模块中的单元测试和集成测试划分,hibernate,unit-testing,maven,model,integration-testing,Hibernate,Unit Testing,Maven,Model,Integration Testing,我相信在我必须写的测试中,我也犯了同样的错误。 我们的应用程序中有不同的maven模块,有一个叫做model,它包含所有POJO、DAO和所有hibernate组件。它只执行CRUD操作,不知道所有其他模块 在写了DAO之后,我觉得有一个测试可以证明对象被持久化和删除等等。事实上,这是一个集成测试,而不是我到目前为止读到的 在另一个平台上使用mock进行单元测试对我来说没有意义,因为它涉及到CRUD操作 现在,在测试该模块时,我的立场有点分歧 这里的最佳实践是什么?在一个合适的项目中它是做什么的

我相信在我必须写的测试中,我也犯了同样的错误。 我们的应用程序中有不同的maven模块,有一个叫做
model
,它包含所有POJO、DAO和所有hibernate组件。它只执行CRUD操作,不知道所有其他模块

在写了DAO之后,我觉得有一个测试可以证明对象被持久化和删除等等。事实上,这是一个集成测试,而不是我到目前为止读到的

在另一个平台上使用mock进行单元测试对我来说没有意义,因为它涉及到CRUD操作

现在,在测试该模块时,我的立场有点分歧

这里的最佳实践是什么?在一个合适的项目中它是做什么的


感谢您的阅读

我可以想出几种方法

一种方法是坚持你一直在做的事情,不管是所谓的集成还是单元测试。通常这种类型的模块只有很少的业务逻辑需要测试,所以CRUD操作是唯一可测试的东西。如果您有易于访问的数据库,并将测试设计为事后清理,那就太好了。更好的是,若你们有一个数据库,你们可以在测试开始前转储它


许多地方使用的另一种方法是使用内存数据库进行测试(例如,高超音速)。但是,由于您使用不同的数据库,所以您并没有完全测试您构建的产品。然而,它将验证您的Hibernate映射和查询(不是特定于目标数据库的),这可能是模块最重要的可测试方面

您好,感谢您的回复。我一直在使用文件模式下的hsqldb和mysql。目标数据库是mysql。我正在使用脚本,因此在上下文中,我切换了我要测试的数据库的属性文件(mysql.jdbc.properties/msyql.hibernate.properties,hsql也是如此)。所以我想我必须坚持下去。谢谢