作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我不知道如何在数据访问层上应用单元测试。我一直想知道是否应该测试数据访问层。在我的公司,我们有稳定的数据库来存储单元测试数据和测试数据访问层,通过运行数据访问对象并检查它们从稳定数据库中获取的数据。
为了通过单元测试,稳定数据库中的数据不能再修改。我认为对此有更好的解决方案。如果我没记错的话,模拟对象无法对 SQL 语句和 ResultSet
映射执行测试。
对 DAO 进行单元测试的最佳方法是什么?使用 TDD 有更好的方法吗?
最佳答案
首先,根据大多数定义,“单元”测试不依赖于数据库等外部系统。您想要创建所谓的“功能”或“集成”测试。在实践中,这些类型的测试将以与单元测试相同的方式实现,使用类似 Junit 的东西,但您应该将它们与单元测试分开,单元测试应该运行得非常快,并且在数据库关闭或数据更改时不会中断。
其次,尽量将大部分业务逻辑放在 DAO 之外,而是将其放入服务 POJO 层,这样您就可以在不涉及数据库的情况下测试业务逻辑。
接下来,为 DAO 设置测试的理想方法是从一个空数据库开始,并用测试数据加载它(通常使用 DAO 本身),然后针对已知且可写的测试运行 DAO 测试数据集。如果您有幸拥有一个只读数据库,您概述的稳定数据库
方法将起作用,但大多数系统都是读/写数据库。
最后,测试 DAO 很有值(value)。数据库查询通常是系统中最脆弱的部分,您不希望等到将它们部署到生产环境时才发现它们正在崩溃。
关于java - 如何在 Java 中对 DAO 应用单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326564/
我是一名优秀的程序员,十分优秀!