Skip to content

cRedisClient 单元测试

简介

Demo_RedisTest.bas 提供了 cRedisClient 的全功能单元测试,覆盖连接管理、5 种数据类型、事务、数据库切换、属性访问和错误处理。

源文件位置: src\Demos\Redis\Demo_RedisTest.bas

运行方式: 在 VB6 IDE 的立即窗口中执行 Demo_RedisTest.TestRedisClient


测试环境

项目说明
Redis 服务器dbserver.cc:9736
Redis 版本8.2.3
协议RESP(非 TLS)
客户端类cRedisClient

测试模块与预期结果

[1] 连接测试

测试项方法预期结果
建立连接Connect("dbserver.cc", 9736)返回 True
连接状态ConnectedTrue
主机名Hostdbserver.cc
端口Port9736
心跳检测Ping()"PONG"

[2] 基础命令测试

测试项方法预期结果
设置键值Set_("test_key", "test_value")True
获取键值Get_("test_key")"test_value"
设带过期键Set_("expire_key", "will_expire", 10, 0)True
查看过期时间TTL("expire_key")10
键存在Exists("test_key")1
键不存在Exists("nonexistent")0
删除键Del("test_key")1
删除后再查Exists("test_key")0
模式匹配Keys("pattern_test*")返回 2 个键的数组

[3] String 操作测试

测试项方法预期结果
自增Incr("counter") (初始 "10")11
再次自增Incr("counter")12
自减Decr("counter")11
批量获取MGet("mkey1", "mkey2", "mkey3", "nonexistent")4 个元素的数组,不存在的键返回空字符串

[4] Hash 操作测试

测试项方法预期结果
设置字段HSet("user:1", "name", "张三")True
获取字段HGet("user:1", "name")"张三"
字段存在HExists("user:1", "name")True
字段不存在HExists("user:1", "email")False
批量获取HMGet("user:1", "name", "age", "city")3 个元素的数组
获取全部HGetAll("user:1")Dictionary 包含 name/age/city
删除字段HDel("user:1", "age")1

[5] List 操作测试

测试项方法预期结果
左侧插入3次LPush("mylist", ...)长度 = 3
右侧插入2次RPush("mylist", ...)长度 = 5
列表长度LLen("mylist")5
范围查询LRange("mylist", 0, -1)5 个元素,顺序: item3, item2, item1, item4, item5
左侧弹出LPop("mylist")"item3"
右侧弹出RPop("mylist")"item5"

[6] Set 操作测试

测试项方法预期结果
添加成员SAdd("myset", "apple")新增 3 个成员
获取全部SMembers("myset")3 个元素(无序)
成员数量SCard("myset")3
成员存在SIsMember("myset", "apple")True
成员不存在SIsMember("myset", "grape")False
删除成员SRem("myset", "banana")1

[7] Sorted Set 操作测试

测试项方法预期结果
添加带分数成员ZAdd("leaderboard", 100, "player1")累计添加成员
按分数范围查询ZRange("leaderboard", 0, -1)player1, player3, player2(按分数升序)
带分数查询ZRange("leaderboard", 0, -1, True)交替返回 member/score
成员数量ZCard("leaderboard")3
删除成员ZRem("leaderboard", "player3")1

[8] 事务操作测试

测试项方法预期结果
事务前状态InTransactionFalse
开启事务Multi()True
事务中状态InTransactionTrue
事务中执行命令Set_ × 3命令被缓存
提交事务Exec()返回 3 个结果的数组,均为 "OK"
提交后状态InTransactionFalse
事务回滚Multi() + Set_ + Discard()命令未执行,键不存在

[9] 服务器信息测试

测试项方法预期结果
心跳检测Ping()"PONG"
服务器信息Info("server")包含 redis_version 等字段
全部信息Info()返回完整 INFO 文本

[10] 数据库切换测试

测试项方法预期结果
默认数据库DbIndex0
切换数据库SelectDb(1)True
切换后索引DbIndex1
写入隔离db1 SET + db0 GETdb0 中不存在该键
切回数据库SelectDb(0)True

[11] 属性测试

属性预期值
Hostdbserver.cc
Port9736
ConnectedTrue
DbIndex0
Timeout5
InTransactionFalse
InPipelineFalse

[12] 错误处理测试

测试项方法预期结果
获取不存在的键Get_("nonexistent_key_12345")空字符串 ""
删除不存在的键Del("nonexistent_key_12345")0

[13] 清理测试数据

自动清理所有测试过程中创建的临时键(expire_key, counter 等)。

[14] 断开连接

测试项方法预期结果
断开连接Disconnect()
连接状态ConnectedFalse

测试输出样例

==========================================
cRedisClient 全功能单元测试
==========================================

[1] 连接测试
----------------------------------------
连接: 成功
Connected: True
Host: dbserver.cc
Port: 9736
PING: PONG

[2] 基础命令测试
----------------------------------------
SET test_key: 成功
GET test_key: test_value
SET with EX(10s): 成功
TTL expire_key: 10
EXISTS test_key: 1
EXISTS expire_key: 1
EXISTS nonexistent: 0
DEL test_key: 1 个键被删除
EXISTS test_key after DEL: 0
KEYS pattern_test*: 找到 2 个键
  - pattern_test1
  - pattern_test2

[3] String 操作测试
----------------------------------------
INCR counter: 11
INCR counter again: 12
DECR counter: 11
MGET mkey1, mkey2, mkey3, nonexistent:
  [0]: value1
  [1]: value2
  [2]: value3
  [3]:

[4] Hash 操作测试
----------------------------------------
HSET user:1 name: 成功
HGET user:1 name: 张三
HGET user:1 age: 25
HGET user:1 city: 北京
HEXISTS user:1 name: True
HEXISTS user:1 email: False
HMGET user:1 name, age, city:
  [0]: 张三
  [1]: 25
  [2]: 北京
HGETALL user:1:
  name: 张三
  age: 25
  city: 北京
HDEL user:1 age: 删除 1 个字段

[5] List 操作测试
----------------------------------------
LPUSH mylist 3次: 长度=3
RPUSH mylist 2次: 长度=5
LLEN mylist: 5
LRANGE mylist 0 -1:
  [0]: item3
  [1]: item2
  [2]: item1
  [3]: item4
  [4]: item5
LPOP mylist: item3
RPOP mylist: item5

[6] Set 操作测试
----------------------------------------
SADD myset apple, banana, orange: 新增 3 个成员
SMEMBERS myset:
  - apple
  - banana
  - orange
SCARD myset: 3
SISMEMBER myset apple: True
SISMEMBER myset grape: False
SREM myset banana: 删除 1 个成员

[7] Sorted Set 操作测试
----------------------------------------
ZADD leaderboard 3 members: 最新新增 1 个成员
ZRANGE leaderboard 0 -1:
  - player1
  - player3
  - player2
ZRANGE leaderboard 0 -1 WITHSCORES:
  - player1: 100
  - player3: 150
  - player2: 200
ZCARD leaderboard: 3
ZREM leaderboard player3: 删除 1 个成员

[8] 事务操作测试
----------------------------------------
InTransaction: False
MULTI: 成功
InTransaction: True
在事务中执行了3个 SET 命令
EXEC: 返回 3 个结果
  [0]: OK
  [1]: OK
  [2]: OK
GET trans_key1: value1
InTransaction: False
DISCARD: 成功
EXISTS discard_key after DISCARD: 0 (应为0)

[9] 服务器操作测试
----------------------------------------
PING: PONG
INFO server: (前100字符) # Server
redis_version:8.2.3
redis_git_sha1:00000000
redis_git_dirty:1
redis_build_id:c978de5219...
INFO: 6373 字节

[10] 数据库切换测试
----------------------------------------
当前 DbIndex: 0
SELECT 1: 成功
DbIndex: 1
GET db1_key: in_database_1
SELECT 0: 成功
DbIndex: 0
EXISTS db1_key in db0: 0 (应为0)

[11] 属性测试
----------------------------------------
Host: dbserver.cc
Port: 9736
Connected: True
DbIndex: 0
Timeout: 5
InTransaction: False
InPipeline: False

[12] 错误处理测试
----------------------------------------
GET nonexistent_key_12345: '' (应为空)
DEL nonexistent_key_12345: 0 (应为0)

[13] 清理测试数据
----------------------------------------

[14] 断开连接
----------------------------------------
Connected after Disconnect: False

==========================================
测试完成!
==========================================

覆盖率统计

类别测试方法数说明
连接管理2Connect, Disconnect
基础命令5Set_, Get_, Del, Exists, Keys, TTL
String4Incr, Decr, MGet, Set_ (带 EX)
Hash5HSet, HGet, HMGet, HGetAll, HExists, HDel
List6LPush, RPush, LPop, RPop, LLen, LRange
Set5SAdd, SMembers, SCard, SIsMember, SRem
Sorted Set4ZAdd, ZRange, ZCard, ZRem
事务4Multi, Exec, Discard, InTransaction
服务器2Ping, Info
数据库2SelectDb, DbIndex
属性7Host, Port, Connected, DbIndex, Timeout, InTransaction, InPipeline
错误处理2不存在键的 Get/Del
合计48

最后更新: 2026-06-16

VB6及其LOGO版权为微软公司所有