【发布时间】:2015-10-23 05:34:20
【问题描述】:
想知道是否有可能完全摆脱对 SQL 的依赖。假设我正在编写与数据库通信的测试,这引入了管理数据库模式的需要,这非常麻烦,因为内存数据库通常与生产类型的数据库不匹配。
是否可以使用 Hibernate/JPA 并且没有下划线的 DB Schema 进行测试?
目前我知道了两种选择,我想在这里扩展我的知识,如果还有其他可能,请分享。
- 模拟休眠
- 使用假的JDBC driver
或者我应该只专注于模拟 DAO 层而不是浪费时间吗? JPA 实体与 DB 的健全性检查完全不同。
【问题讨论】:
-
这毫无意义。测试应该显示问题,并且您喜欢模拟有问题的东西以忽略它们?
-
但是,如果您在精确的单元测试中专注于其他一些失败点怎么办。我的意思是你没有测试你需要测试一些功能的数据库,你需要有一些简单的方法来消除对数据库的依赖。在这种情况下,您需要以您期望它在正常条件下工作的方式模拟数据库行为。
-
切出DB是正常的吗?如果您可以在集成测试中测试所有正常条件,为什么还要测试代码并模拟一些代码?
-
我猜这是单元测试的目的。集成测试并不是真正的轻量级经历。在集成测试中,我认为您应该只检查与其他系统(包括数据库)的集成。对于单位来说,通常的做法是跳过外部系统的复杂性。
-
取决于你如何使用休眠。包括 n-m/1-n 关系!您能否将记录从 LOGIN 到 USER 到 ADDRESS 到 ORDERS 到 DELIVERYS 以获取最后一个订单的状态?它们是您应该避免的深层嵌套模拟!
标签: java hibernate unit-testing jpa jdbc