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

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

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

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

9584 次点击
所在节点    Java
51 条回复
lazyfighter
2019-12-11 19:01:44 +08:00
我今天刚提问这个问题,之前依赖 mysqlServer,目前依赖 embeddedH2
slyang5
2019-12-11 19:12:37 +08:00
@Test
@SqlGroup({
@Sql("/sql/sql_logic_delete.sql"),
@Sql(scripts = "/sql/sql_logic_delete_clear.sql", executionPhase=Sql.ExecutionPhase.AFTER_TEST_METHOD) })
public void featuresLogicDeleteTest() {
// do ....
}
slyang5
2019-12-11 19:15:33 +08:00
@slyang5 语言 JAVA, 框架 spirng
dengtongcai
2019-12-11 19:19:47 +08:00
mock 哇
janxin
2019-12-11 19:24:47 +08:00
单测目前都是 Mock
kaneg
2019-12-11 19:28:43 +08:00
如果不依赖特定数据库的特性,可以用 h2,完全不依赖运行环境,一次编写,随处运行。
luozic
2019-12-11 19:33:57 +08:00
Java 有不少集成版本的测试 demo 数据库,H2,monogodb,redis 都有对应的,即使没有,按 JDBC 也可以 mock
daimazha
2019-12-11 19:35:05 +08:00
内嵌
hantsy
2019-12-11 19:48:30 +08:00
终于看到一个技术帖子了。

写 Java 测试离不开 JUnit。在 Spring 下写测试比较简单些,Spring 自身带的测试工具很全。
https://github.com/hantsy/building-restful-apis-with-springmvc-gitbook/blob/master/testing.md (比较老了一点)
Spring Boot 1.4 中增加了大量工具简化测试: https://github.com/hantsy/building-restful-apis-with-springmvc-gitbook/blob/master/boot-1.4.md

数据库相关的单元测试可以 Mock 相应的操作(比如 Mock JpaRepsoitory ),集成测试时也需要创建数据库,初始化数据为测试准备,Spring Boot 可以使用嵌入式数据库代替(不用清理数据)。

Java EE 的测试参考:
Java EE 6: https://github.com/hantsy/signup-app/tree/master/src/test/java/org/company/test
Java EE 7: https://github.com/hantsy/ee7-jaxrs-sample/tree/master/vanilla/src/test/java/com/hantsylab/example/ee7/blog
Java EE 8: https://github.com/hantsy/javaee8-jaxrs-sample/tree/master/backend/src/test/java/com/github/hantsy/ee8sample/rest
lihuayang
2019-12-11 19:56:38 +08:00
用 h2。单测前准备好 ddl (新建表)、dml (数据),每次运行单测都加载这两个文件。干净,不会污染测试环境的库。
p1094358629
2019-12-11 20:42:54 +08:00
我自己写了一个 basicTemplateTest 基类。模板方法:
提供了编程式事务,配置 setRollBackOnly().即用 spring 的 jdbc 自动回滚。
zhuzhibin
2019-12-11 21:20:41 +08:00
你这种场景应该叫验收测试吧 通常是 before 前初始化 after 清除掉咯
springz
2019-12-11 21:23:00 +08:00
启动一个 docker,用完关闭。
springz
2019-12-11 21:23:42 +08:00
模拟 dao 我也是我纠结的点,还是尽量真实吧。
AbrahamGreyson
2019-12-11 21:28:54 +08:00
主流的方式是在 setup teardown 里准备数据, 清空数据库。

上面说 mock 的, 楼主就是要测数据库。
des
2019-12-11 21:36:33 +08:00
+1 感觉本来就是 curd,mock 了 dao 层就没啥好测的了 😂
springz
2019-12-11 21:59:17 +08:00
我一直反对 dao 层单元测试 mock
avalon0624
2019-12-11 22:39:18 +08:00
用 migrate,开始前清空数据库,生成符合条件的测试数据
x66
2019-12-11 23:54:13 +08:00
```
单元测试( unit testing ),是指对软件中的最小可测试单元进行检查和验证。
```
都连数据库了,还叫单元测试吗?
FrankD
2019-12-11 23:56:03 +08:00
可以用本地数据库

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

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

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

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

© 2021 V2EX