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

2020-06-26 16:46:14 +08:00
 chenqh

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

3302 次点击
所在节点    Python
19 条回复
linvaux
2020-06-26 16:47:06 +08:00
你可能对单元测试有啥误解
gwy15
2020-06-26 16:47:58 +08:00
sqlite 内存数据库?
chenqh
2020-06-26 17:06:47 +08:00
@gwy15 mysql
chenqh
2020-06-26 17:07:47 +08:00
@linvaux 虽然真正的单元测试不带数据库,但是不带数据库我总感觉心里好慌,你也可以认为我的是集成测试吧
tinypig
2020-06-26 17:11:28 +08:00
--reuse-db
love
2020-06-26 17:44:24 +08:00
单元测试开始时开事务,结束后直接回滚会不会提速?
chenqh
2020-06-26 17:48:23 +08:00
@love 这应该不行
chenqh
2020-06-26 17:48:34 +08:00
@tinypig 这个是什么东西?
chinvo
2020-06-26 17:51:21 +08:00
一般单元测试到翻译出 SQL 语句为止,不实际执行的……

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

但是单元测试的初衷, 并不是把 db 也包含进去
chenqh
2020-06-27 12:26:57 +08:00
@Kaiv2
@lzlee 我看下 h2
Banxiaozhuan
2020-06-27 17:20:36 +08:00
难道不是 Mock 吗? 单元测试可能只关心内部状态不该关心数据库

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

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

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

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

© 2021 V2EX