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

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

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

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

9598 次点击
所在节点    Java
51 条回复
akira
2019-12-12 00:16:58 +08:00
@x66 测试测试,没必要纠结称呼
xuanbg
2019-12-12 06:36:07 +08:00
SQL 语句本来就或多或少包含逻辑,另外数据结构的调整甚至数据库版本的升级,单元测试都不管的么? mock 数据做单元测试的,怕是没更新过数据库结构吧
dilu
2019-12-12 07:52:58 +08:00
如果修改了数据库里面的数据 这就叫数据库测试了。当然并没有严格区分,你非要测试也没问题的。
hmxxmh
2019-12-12 08:56:12 +08:00
@x66 单元测试不都是造假数据吗,要连数据库直接开个测试环境测试吧
ebingtel
2019-12-12 09:10:29 +08:00
我是先 dump 一份测试数据库(不含数据),跑单元测试之后,再 drop 掉……
zhenjiachen
2019-12-12 09:19:40 +08:00
这不是很简单吗?如果用了 Spring 的注解事务,不管是 jpa 还是 mybatis 使用单元测试在方法或者类上面加事务注解测试执行完了不管是失败还是成功都会回滚的啊。注意要用 Spring tx 里面的 Transactional。
zclHIT
2019-12-12 09:54:26 +08:00
mock repository 的返回结果,单元测试,顾名思义就是测一个单元。
(整套流程全跑通那是集成测试。。。
PoetAndPoem
2019-12-12 10:11:05 +08:00
一般 afterclass 做回滚
shazh520
2019-12-12 15:02:50 +08:00
我想做的那就是集成测试了,调接口,然后 controller service dao 全部跑,之前误解了,sorry 大伙;
我现在是单独建一个测试库(现存开发库、测试库、正式库),然后每次启动测试都通过 jpa 自动生成表( hibernate ),然后在 spring boot 的启动任务(放在 test 包中,不会打包到正式代码)中利用 repo 往里面塞准备的数据。
我不想用 SQL 的原因是我想我在改动 Entity 类的时候能够及时的发现错误,容易维护一些,SQL 的话就只能等执行的时候报错了。
zhangjiayi1095
2019-12-16 16:19:08 +08:00
用的 h2
sunxiansong
2020-06-08 18:21:33 +08:00
测之前 docker 起一个,完了 autoRemove

缺点就是起停一个 container 差不多要 3 秒

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

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

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

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

© 2021 V2EX