2 回答
TA贡献1797条经验 获得超6个赞
通过 miniredis 模拟失败,您可以使用SetError:https ://github.com/alicebob/miniredis/issues/36#issuecomment-642009898
func TestGet(t *testing.T) {
mr, _ = miniredis.Run()
// normal test
// ...
// error test
mr.SetError("mock error")
_, err = c.Get("test2")
assert.EqualError(t, err, "mock error")
mr.Close()
}
TA贡献2003条经验 获得超2个赞
我已在本地运行您的代码,但没有收到错误消息。
普通文件
package redis
import (
"errors"
"fmt"
"os"
"strconv"
"github.com/go-redis/redis"
"go.uber.org/zap"
)
var redisClient *redis.Client
var redisCert string
var redisURL = "localhost:6379"
var redisPass = ""
var redisDB = 0
type Client struct {
redisClient *redis.Client
}
func newRedisClient() *Client {
if os.Getenv("REDIS_URL") != "" {
redisURL = os.Getenv("REDIS_URL")
}
if os.Getenv("REDIS_PASS") != "" {
redisPass = os.Getenv("REDIS_PASS")
}
if os.Getenv("REDIS_DB") != "" {
redisDB, _ = strconv.Atoi(os.Getenv("REDIS_DB"))
}
client := redis.NewClient(&redis.Options{
Addr: redisURL,
Password: redisPass,
DB: redisDB,
})
redisClient = client
_, err := redisClient.Ping().Result()
if err != nil {
fmt.Println("Failed to connect", zap.Error(err))
return nil
}
fmt.Println("Redis client is ready")
return &Client{redisClient: client}
}
func (r *Client) Get(key string) (string, error) {
res, err := redisClient.Get(key).Result()
if err == redis.Nil {
return "", errors.New("Key Not Found")
} else if err != nil {
return "", err
} else {
return res, nil
}
}
测试文件
package redis
import (
"fmt"
"os"
"testing"
"github.com/alicebob/miniredis/v2"
)
var mr *miniredis.Miniredis
func TestGet(t *testing.T) {
var err error
mr, err = miniredis.Run()
fmt.Printf("Run err: %v\n", err)
fmt.Printf("mr.Addr(): %v\n", mr.Addr())
err = mr.Set("test1", "some")
fmt.Printf("Set err: %v\n", err)
err = os.Setenv("REDIS_URL", mr.Addr())
fmt.Printf("Setenv err: %v\n", err)
c := newRedisClient()
r, err := c.Get("test1")
fmt.Printf("Get err: %v\n", err)
fmt.Printf("r: %v\n", r)
mr.Close()
}
结果
go test
Run err: <nil>
mr.Addr(): 127.0.0.1:54966
Set err: <nil>
Setenv err: <nil>
Redis client is ready
Get err: <nil>
r: some
PASS
ok test/sof 0.536s
- 2 回答
- 0 关注
- 267 浏览
添加回答
举报