为了账号安全,请及时绑定邮箱和手机立即绑定

Java单元测试如何测试修改数据库部分的代码?

Java单元测试如何测试修改数据库部分的代码?

紫衣仙女 2019-03-01 10:43:39
对于各种数据库的CRUD操作,都要写对应的单元测试。对于查找这样并没有太多的问题,但是对于增删改的话这样就会有问题,由于代码是在生产环境中运行,所以不能真的进行真的进行改动。 现在我想到的是方案是另外创建一个用于开发的数据与生产环境中的数据库分开,但是这样的话有些麻烦。请问在企业真实的开发流程中对于要对数据库修改的代码的单元测试一般都是怎样做的? 我简单的看了一下mockito的介绍,好像没有找到好的解决方案。大家能否给一下建议或者推荐一下这方面的资料。 注释:在IBM社区看到这样一段对于单元测试的介绍: 单元测试要易于执行,单元测试的执行不应该需要配置等繁琐操作就可以运行。如果单元测试代码包含访问数据库、网络等,这个测试就不是真正的单元测试。 一种说法是单元测试是不允许连接真实的数据库的,所以一切数据库操作都要mock,那么数据库部分的代码到底应该怎么测试?
查看完整描述

5 回答

?
米脂

TA贡献1836条经验 获得超3个赞

可以使用h2完成单元测试。一般企业级开发都有自己的测试环境的,直接连数据库测试也没太大的问题

查看完整回答
反对 回复 2019-03-01
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

  1. 你这个不是单元测试Unit Test,是集成测试Integration Test

  2. 不应该使用h2等内存数据库,因为这些数据库的语法、特性和你生产数据库不同,很可能会导致测试失败

  3. 如果你用Spring,则参考Spring官方文档中关于Integration Test章节

查看完整回答
反对 回复 2019-03-01
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

用内存数据库来解决该问题。引入内存数据库之后需要在代码中管理ddl脚本和必要的初始化数据dml脚本,
每次跑单元测试时启动内存数据库,刷ddl和dml脚本,然后执行单元测试逻辑,推荐管理数据库脚本工具有flyway和liquibase

查看完整回答
反对 回复 2019-03-01
?
墨色风雨

TA贡献1853条经验 获得超6个赞

对于数据库层的测试属于acceptance tedt,之所以不能再写单元测试是因为数据库层的操作已经是最底层了。没有什么可以mock的了。

查看完整回答
反对 回复 2019-03-01
?
潇湘沐

TA贡献1816条经验 获得超6个赞

spring Junit 测试可以在测试类上面注解@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
这样就能跑并且跑完以后,数据库是不会变化的,因为跑完了数据就会回滚

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 1306 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信