大家在做单元测试的时候如何准备数据库环境?

2019-12-11 15:18:56 +08:00
 shazh520

例如说需要测试一个删除功能,大家是在测试方法的开头插入一条记录以供删除吗?还是什么其他方法?

还有一种情况是,例如一个电商系统,想测删除 SKU 接口,准备数据的时候就得先准备产品,然后再准备 SKU,大家是如何准备的?

9861 次点击
所在节点    Java
51 条回复
shazh520
2019-12-11 15:31:10 +08:00
V 友求教 求教
Hanggi
2019-12-11 15:34:14 +08:00
测试没有 before 和 after 吗?通常都是要在测试开头创建数据,结束的时候删掉的。
BruceLi
2019-12-11 15:34:34 +08:00
mock 一下,单元测试一般不依赖其他接口或者系统。
shazh520
2019-12-11 15:35:54 +08:00
@Hanggi 用 jpa 插入数据吗?还是用 SQL 脚本?
shazh520
2019-12-11 15:36:36 +08:00
@BruceLi 就是自己的系统啊,测试删除产品接口,那得有一个产品 ID 啊,如何准备这个产品 ID 的问题
Ahaochan
2019-12-11 15:48:41 +08:00
用 h2database,准备初始化 sql 脚本
shazh520
2019-12-11 15:51:27 +08:00
@Ahaochan 项目已经用 MySQL 了,现在好像换不了
KentY
2019-12-11 15:56:04 +08:00
google 下 flyway 和 h2
lihongjie0209
2019-12-11 15:58:43 +08:00
有数据库就不叫单元测试了
zunceng
2019-12-11 16:03:21 +08:00
dao 层做一个 mock 当然也可以用 sqlmock
chendy
2019-12-11 16:10:33 +08:00
既然是单元测试,那就 mock 掉 dao
否则就脚本塞数据,直接测接口,做集成测试
greenlaw110
2019-12-11 16:26:52 +08:00
mock 是常见的方式, 不过涉及到数据库操作的情况下,mock 总感觉不靠谱. 啥都 mock 了,函数里面也没有什么逻辑, 测试也失去了应有的作用.

这也是我一直很纠结单元测试的原因之一.

后来自己折腾出了一套 functional 测试工具, 数据准备与清理工作也不成问题了. 有兴趣的同学可以参考一下这里:
https://gitee.com/actframework/act-doc/blob/master/cn/test.md#-82-%E5%87%86%E5%A4%87%E6%B8%85%E7%90%86%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE
shazh520
2019-12-11 17:05:34 +08:00
@lihongjie0209
@chendy 感谢 认识上的一个误区
shazh520
2019-12-11 17:09:02 +08:00
@KentY 有了新思路
killergun
2019-12-11 17:10:59 +08:00
自己 mock 数据进行单元测试。不实际连接数据库
phpcxy
2019-12-11 17:11:31 +08:00
我都是开始测试的时候创建一些记录,然后测试完回滚
abcbuzhiming
2019-12-11 17:46:42 +08:00
想问一下,你们本地完全没有数据库的吗?这种涉及到数据库的难道不应该至少本地建个库(或者专门一个数据库服务器)测试一下吗
fkdog
2019-12-11 17:55:14 +08:00
spring 在测试类上打上 @transactional 注解。
这样运行完测试方法会自动回滚数据,比 before after 清理资源方式更简单
mingoing
2019-12-11 18:41:11 +08:00
sqlite 内存模式了解下
liuzhaowei55
2019-12-11 18:55:43 +08:00
spring boot + jpa 可使用 @DataJpaTest 注解,会自动回滚。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX