第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 miniredis 模擬 redis 服務(wù)器失敗

使用 miniredis 模擬 redis 服務(wù)器失敗

Go
藍(lán)山帝景 2022-05-23 15:38:47
Golang 新手在這里 :)我在 go-redis 上有一個 redis 客戶端包裝器,我想測試它是否正常工作。我曾嘗試使用 miniredis 來模擬我將要連接的 redis 服務(wù)器,但我不斷收到錯誤消息。當(dāng)我將所有東西都放在同一個函數(shù)中時,它就可以工作了——我可以針對 miniredis 服務(wù)運(yùn)行 go-redis。但是,當(dāng)我嘗試使用我的客戶端時,它失敗了。我試過查看 go-redis 和 miniredis 的文檔,但找不到任何答案。我也嘗試過將 miniredis 服務(wù)器定義為全局變量,但這也無濟(jì)于事。客戶端實(shí)現(xiàn):package redisimport (    "errors"    "fmt"    "github.com/go-redis/redis"    "go.uber.org/zap"    "os"    "strconv"    "time")var redisClient *redis.Clientvar redisCert stringvar redisURL = "localhost:6379"var redisPass = ""var redisDB = 0type 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()    fmt.Println(res, err)    if err == redis.Nil {        return "", errors.New("Key Not Found")    } else if err != nil {        return "", err    } else {        return res, nil    }}測試實(shí)現(xiàn):package redisimport (    "github.com/alicebob/miniredis/v2"    "gopkg.in/go-playground/assert.v1"    "os"    "testing")var mr *miniredis.Miniredisfunc TestGet(t *testing.T) {    mr, _ = miniredis.Run()    mr.Set("test1", "some")    os.Setenv("REDIS_URL", mr.Addr())    c := newRedisClient()    r, err := c.Get("test1")    assert.Equal(t, r, "")    assert.Equal(t, err, "")    mr.Close()}我究竟做錯了什么?
查看完整描述

2 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超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()

}


查看完整回答
反對 回復(fù) 2022-05-23
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個贊

我已在本地運(yùn)行您的代碼,但沒有收到錯誤消息。


普通文件


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()

}

結(jié)果


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


查看完整回答
反對 回復(fù) 2022-05-23
  • 2 回答
  • 0 關(guān)注
  • 302 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號