单元测试的时候创建数据库,插入测试数据耗时太长怎么办

2020 年 6 月 26 日
 simple2025

我现在随便跑一个测试都是 7-10s, 哪怕是一个简单的 self.assertEqual(1,1) 也要这么久,因为创建数据库的表和插入数据耗时太长,有什么办法加速创建的吗?

3984 次点击
所在节点    Python
19 条回复
linvaux
2020 年 6 月 26 日
你可能对单元测试有啥误解
gwy15
2020 年 6 月 26 日
sqlite 内存数据库?
simple2025
2020 年 6 月 26 日
@gwy15 mysql
simple2025
2020 年 6 月 26 日
@linvaux 虽然真正的单元测试不带数据库,但是不带数据库我总感觉心里好慌,你也可以认为我的是集成测试吧
tinypig
2020 年 6 月 26 日
--reuse-db
love
2020 年 6 月 26 日
单元测试开始时开事务,结束后直接回滚会不会提速?
simple2025
2020 年 6 月 26 日
@love 这应该不行
simple2025
2020 年 6 月 26 日
@tinypig 这个是什么东西?
chinvo
2020 年 6 月 26 日
一般单元测试到翻译出 SQL 语句为止,不实际执行的……

集成测试再做实际执行
draymonder
2020 年 6 月 26 日
单元测试 直接 mock 执行 sql.
janxin
2020 年 6 月 26 日
mock 掉数据库
jones2000
2020 年 6 月 26 日
单元测试 只要能覆盖所有的代码分支,执行速度都是其次的吧, 一般不都是半夜自动编译出版本然后跑一遍所有的单元测试,出测试报告,
huijiewei
2020 年 6 月 26 日
单元测试不要牵扯基础设施层
nuk
2020 年 6 月 26 日
LOAD DATA LOCAL INFILE 快一点。。。吧
mawerss1
2020 年 6 月 26 日
分享一下我的解决办法,mock datasource,和数据库链接,然后产生一条 sql,手写出正确的 sql 去和正确的 sql 对比。
Kaiv2
2020 年 6 月 27 日
试试 h2 内存数据库
lzlee
2020 年 6 月 27 日
可以 mock
可以用 h2

但是单元测试的初衷, 并不是把 db 也包含进去
simple2025
2020 年 6 月 27 日
@Kaiv2
@lzlee 我看下 h2
Banxiaozhuan
2020 年 6 月 27 日
难道不是 Mock 吗? 单元测试可能只关心内部状态不该关心数据库

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

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

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

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

© 2021 V2EX