我目前正在使用Java 17、Dropwizard和JUnit 5进行一个Java项目,我专注于改进我的单元测试和采用测试驱动开发(TDD)实践.我的应用程序通过DAO接口与数据库交互,我正在探索测试这些交互的最佳方法,特别是对于执行诸如将数据插入数据库但不返回值的操作的方法.
考虑到这些方法的性质,我考虑了两种主要的测试方法:
- 使用假实现:创建我的DAO接口的假实现,以模拟内存中的数据库操作
- 使用内存数据库:使用内存数据库(如H2)在受控环境中执行真实的数据库操作.
我知道假实现通过避免设置真实数据库连接的开销来提供速度和简单性,使它们非常适合单元测试.另一方面,内存数据库提供了一个更真实的测试环境,这似乎有利于集成测试,以确保我的SQL查询和事务按预期的方式运行.
我的问题:
- 在TDD环境中,考虑到测试中速度和真实性之间的平衡,对于不返回值的测试方法,您会推荐哪种方法?
- 是否有特定的设想方案或项目阶段,其中一种方法明显优于另一种方法?
我的目标是一种测试策略,它不仅确保可靠性和可维护性,而且与TDD的最佳实践相一致.您可以分享的任何见解、经验或建议都将不胜感激.
谢谢你!