Skip to content

cRedisClient Unit Testing

Overview

Demo_RedisTest.bas provides full-featured unit testing for cRedisClient, covering connection management, 5 data types, transactions, database switching, property access, and error handling.

Source File: src\Demos\Redis\Demo_RedisTest.bas

How to Run: Execute Demo_RedisTest.TestRedisClient in the VB6 IDE Immediate Window


Test Environment

ItemDescription
Redis Serverdbserver.cc:9736
Redis Version8.2.3
ProtocolRESP (non-TLS)
Client ClasscRedisClient

Test Modules and Expected Results

[1] Connection Test

Test CaseMethodExpected Result
Establish connectionConnect("dbserver.cc", 9736)Returns True
Connection statusConnectedTrue
Host nameHostdbserver.cc
PortPort9736
HeartbeatPing()"PONG"

[2] Basic Commands Test

Test CaseMethodExpected Result
Set key-valueSet_("test_key", "test_value")True
Get key-valueGet_("test_key")"test_value"
Set with expirySet_("expire_key", "will_expire", 10, 0)True
Check TTLTTL("expire_key")10
Key existsExists("test_key")1
Key not existsExists("nonexistent")0
Delete keyDel("test_key")1
After deletionExists("test_key")0
Pattern matchKeys("pattern_test*")Returns array of 2 keys

[3] String Operations Test

Test CaseMethodExpected Result
IncrementIncr("counter") (initial "10")11
Increment againIncr("counter")12
DecrementDecr("counter")11
Batch getMGet("mkey1", "mkey2", "mkey3", "nonexistent")4-element array, non-existent key returns empty string

[4] Hash Operations Test

Test CaseMethodExpected Result
Set fieldHSet("user:1", "name", "Zhang San")True
Get fieldHGet("user:1", "name")"Zhang San"
Field existsHExists("user:1", "name")True
Field not existsHExists("user:1", "email")False
Batch getHMGet("user:1", "name", "age", "city")3-element array
Get allHGetAll("user:1")Dictionary containing name/age/city
Delete fieldHDel("user:1", "age")1

[5] List Operations Test

Test CaseMethodExpected Result
Left push 3 timesLPush("mylist", ...)Length = 3
Right push 2 timesRPush("mylist", ...)Length = 5
List lengthLLen("mylist")5
Range queryLRange("mylist", 0, -1)5 elements, order: item3, item2, item1, item4, item5
Left popLPop("mylist")"item3"
Right popRPop("mylist")"item5"

[6] Set Operations Test

Test CaseMethodExpected Result
Add membersSAdd("myset", "apple") etc.Added 3 members
Get allSMembers("myset")3 elements (unordered)
Member countSCard("myset")3
Member existsSIsMember("myset", "apple")True
Member not existsSIsMember("myset", "grape")False
Remove memberSRem("myset", "banana")1

[7] Sorted Set Operations Test

Test CaseMethodExpected Result
Add with scoreZAdd("leaderboard", 100, "player1") etc.Cumulative members added
Query by score rangeZRange("leaderboard", 0, -1)player1, player3, player2 (ascending by score)
With scores queryZRange("leaderboard", 0, -1, True)Alternating member/score
Member countZCard("leaderboard")3
Remove memberZRem("leaderboard", "player3")1

[8] Transaction Operations Test

Test CaseMethodExpected Result
Before transactionInTransactionFalse
Start transactionMulti()True
In transactionInTransactionTrue
Execute commands in transactionSet_ x 3Commands cached
Commit transactionExec()Returns 3-element array, all "OK"
After commitInTransactionFalse
Rollback transactionMulti() + Set_ + Discard()Commands not executed, key doesn't exist

[9] Server Information Test

Test CaseMethodExpected Result
HeartbeatPing()"PONG"
Server infoInfo("server")Contains redis_version etc.
Full infoInfo()Returns complete INFO text

[10] Database Switching Test

Test CaseMethodExpected Result
Default databaseDbIndex0
Switch databaseSelectDb(1)True
After switch indexDbIndex1
Write isolationdb1 SET + db0 GETKey doesn't exist in db0
Switch backSelectDb(0)True

[11] Properties Test

PropertyExpected Value
Hostdbserver.cc
Port9736
ConnectedTrue
DbIndex0
Timeout5
InTransactionFalse
InPipelineFalse

[12] Error Handling Test

Test CaseMethodExpected Result
Get non-existent keyGet_("nonexistent_key_12345")Empty string ""
Delete non-existent keyDel("nonexistent_key_12345")0

[13] Cleanup Test Data

Automatically cleans up all temporary keys created during testing (expire_key, counter, etc.).

[14] Disconnect

Test CaseMethodExpected Result
DisconnectDisconnect()-
Connection statusConnectedFalse

Test Output Sample

==========================================
cRedisClient Full Unit Test
==========================================

[1] Connection Test
----------------------------------------
Connect: Success
Connected: True
Host: dbserver.cc
Port: 9736
PING: PONG

[2] Basic Commands Test
----------------------------------------
SET test_key: Success
GET test_key: test_value
SET with EX(10s): Success
TTL expire_key: 10
EXISTS test_key: 1
EXISTS expire_key: 1
EXISTS nonexistent: 0
DEL test_key: 1 key deleted
EXISTS test_key after DEL: 0
KEYS pattern_test*: Found 2 keys
  - pattern_test1
  - pattern_test2

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

[4] Hash Operations Test
----------------------------------------
HSET user:1 name: Success
HGET user:1 name: Zhang San
HGET user:1 age: 25
HGET user:1 city: Beijing
HEXISTS user:1 name: True
HEXISTS user:1 email: False
HMGET user:1 name, age, city:
  [0]: Zhang San
  [1]: 25
  [2]: Beijing
HGETALL user:1:
  name: Zhang San
  age: 25
  city: Beijing
HDEL user:1 age: 1 field deleted

[5] List Operations Test
----------------------------------------
LPUSH mylist 3 times: length=3
RPUSH mylist 2 times: length=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 Operations Test
----------------------------------------
SADD myset apple, banana, orange: Added 3 members
SMEMBERS myset:
  - apple
  - banana
  - orange
SCARD myset: 3
SISMEMBER myset apple: True
SISMEMBER myset grape: False
SREM myset banana: 1 member removed

[7] Sorted Set Operations Test
----------------------------------------
ZADD leaderboard 3 members: Latest 1 member added
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 member removed

[8] Transaction Operations Test
----------------------------------------
InTransaction: False
MULTI: Success
InTransaction: True
Executed 3 SET commands in transaction
EXEC: Returned 3 results
  [0]: OK
  [1]: OK
  [2]: OK
GET trans_key1: value1
InTransaction: False
DISCARD: Success
EXISTS discard_key after DISCARD: 0 (should be 0)

[9] Server Operations Test
----------------------------------------
PING: PONG
INFO server: (first 100 chars) # Server
redis_version:8.2.3
redis_git_sha1:00000000
redis_git_dirty:1
redis_build_id:c978de5219...
INFO: 6373 bytes

[10] Database Switching Test
----------------------------------------
Current DbIndex: 0
SELECT 1: Success
DbIndex: 1
GET db1_key: in_database_1
SELECT 0: Success
DbIndex: 0
EXISTS db1_key in db0: 0 (should be 0)

[11] Properties Test
----------------------------------------
Host: dbserver.cc
Port: 9736
Connected: True
DbIndex: 0
Timeout: 5
InTransaction: False
InPipeline: False

[12] Error Handling Test
----------------------------------------
GET nonexistent_key_12345: '' (should be empty)
DEL nonexistent_key_12345: 0 (should be 0)

[13] Cleanup Test Data
----------------------------------------

[14] Disconnect
----------------------------------------
Connected after Disconnect: False

==========================================
Test Complete!
==========================================

Coverage Statistics

CategoryTest MethodsDescription
Connection2Connect, Disconnect
Basic Commands5Set_, Get_, Del, Exists, Keys, TTL
String4Incr, Decr, MGet, Set_ (with EX)
Hash5HSet, HGet, HMGet, HGetAll, HExists, HDel
List6LPush, RPush, LPop, RPop, LLen, LRange
Set5SAdd, SMembers, SCard, SIsMember, SRem
Sorted Set4ZAdd, ZRange, ZCard, ZRem
Transaction4Multi, Exec, Discard, InTransaction
Server2Ping, Info
Database2SelectDb, DbIndex
Properties7Host, Port, Connected, DbIndex, Timeout, InTransaction, InPipeline
Error Handling2Get/Del non-existent keys
Total48

Last Updated: 2026-06-16

VB6 and LOGO copyright of Microsoft Corporation