有些方法是要用到 MySQL 和 Redis 的,然后想断言一下,代码类似:
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Test
public void TestSetString() {
String key = "foo";
String value = "value";
redisTemplate.opsForValue().set(key, value);
Assert.assertEquals(value, redisTemplate.opsForValue().get(key));
}
我想到的是用 Docker 起个测试服务,每次启动擦掉之前的数据。
1
Guozi1989 2019-11-21 18:00:28 +08:00
Mock
|
2
Solace202 2019-11-21 18:53:21 +08:00
@salamanderMH 楼主能说下你头像是哪个电影的人吗?看着很熟悉但是总是想不起来。。。
|
3
ningmengmao 2019-11-21 18:57:11 +08:00 via Android
@Solace202 美国往事
|
4
salamanderMH OP @Solace202 美国往事里的小时候的黛博拉。
|
6
hyrepo 2019-11-21 20:18:49 +08:00 via iPhone
redis 的话有个东西叫 mockredis(还是 redismock 来着),其它关系型数据库用 h2,放内存里的,测完就没了,不要用 docker,太重了,而且你怎么自动化?
参考 https://hyrepo.com/tech/h2-unit-test/ |
8
hdbzsgm 2019-11-21 22:49:29 +08:00
用 docker compose 起坏境跑测试 其实并不重 我们就这么用的
|
9
ArtIsPatrick 2019-11-21 23:30:57 +08:00 via iPhone
搞个开发环境的数据库啊
|
11
optional 2019-11-22 02:37:18 +08:00 via Android
crud 测试 mock 太艰难了。docker init db 再销毁。
|
13
ebingtel 2019-11-22 08:38:40 +08:00
我是测试前 脚本 dump mysql 数据库、执行测试用例、测完再删除数据库
|
14
passerbytiny 2019-11-22 09:00:24 +08:00
标准做法,适用一切数据库:@before(类级别或方法级别,需要 junit5 或特殊处理的 junit4)初始化数据,@after 清理数据。
关系型数据库专有用法:@roolback=true,方法中值初始化数据,无需清理数据。 以上是在用例范围上的做法,后面的方法是全局范围处理或工具,可以作为辅助:使用 H2 内存数据库,这样用完就扔; Spring Test 提供了一种方式,让你可以给一个 SQL 脚本在测试开始前集中执行;完全使用 Spring Data Jpa,这样你在初始化和清理数据的时候可以使用纯 Java 代码,并且无需考虑 H2 数据库与真实数据库的兼容性处理。 |
15
qyvlik 2019-11-22 09:03:34 +08:00
|
16
hyrepo 2019-11-22 10:33:13 +08:00
@hdbzsgm
@qyvlik 说重是相对 mock 的方案而言的,用 mockredis 或者 h2 只需要 gradle 里面引入几个依赖就可以跑起来,跑测试的步骤也和普通的测试一样,完全不需要对外部系统的配置,但是如果用了 docker 那么每个人跑测试之前都要 docker-compose up 一下,放到 CI 上之后也需要处理这个问题,没有 docker 的话还需要装个 docker。测试数据的准备可以参考 @passerbytiny 的回复,用 @before 来导入数据,我能想到唯一应该使用 docker 来起的场景就是 @zjp 说的,有一些数据库的特性没有 mock 框架支持的时候 |