Skip to content

Instantly share code, notes, and snippets.

@helloteemo
Created July 12, 2022 07:13
Show Gist options
  • Save helloteemo/719c4ba0544e84ae6d8e05f969770a5e to your computer and use it in GitHub Desktop.
Save helloteemo/719c4ba0544e84ae6d8e05f969770a5e to your computer and use it in GitHub Desktop.
GoRedis 单元测试写法
package redis_demo
import (
"context"
"encoding/json"
"github.com/alicebob/miniredis"
"github.com/smartystreets/goconvey/convey"
"github.com/stretchr/testify/assert"
"gopkg.in/redis.v5"
"testing"
)
func TestAccountCache_GetMember(t *testing.T) {
fake, err := miniredis.Run()
assert.Nil(t, err)
client := redis.NewClient(&redis.Options{
Network: "tcp",
Addr: fake.Addr(),
})
accountCache := NewAccountCache(context.TODO(), client)
convey.Convey("Exists", t, func() {
bytes, err := json.Marshal(MemberCacheDao{Id: 938, Name: "teemo"})
assert.Nil(t, err)
err = fake.Set(`me_938`, string(bytes))
assert.Nil(t, err)
member, exists, err := accountCache.GetMember(938)
assert.Nil(t, err)
assert.True(t, exists)
assert.EqualValues(t, member.Id, 938)
assert.EqualValues(t, member.Name, `teemo`)
})
fake.FlushAll()
convey.Convey("Exists", t, func() {
member, exists, err := accountCache.GetMember(938)
assert.Nil(t, err)
assert.False(t, exists)
assert.EqualValues(t, member.Id, 0)
assert.EqualValues(t, member.Name, ``)
})
}
package redis_demo
import (
"context"
"encoding/json"
"fmt"
"gopkg.in/redis.v5"
)
// AccountCache account cache
type AccountCache struct {
ctx context.Context
client *redis.Client
}
// NewAccountCache new account cache
func NewAccountCache(ctx context.Context, client *redis.Client) *AccountCache {
return &AccountCache{
ctx: ctx,
client: client,
}
}
func (c *AccountCache) memberKey(mid int64) string {
return fmt.Sprintf("me_%d", mid)
}
// GetMember get member ext
func (c *AccountCache) GetMember(mid int64) (ext MemberCacheDao, exists bool, err error) {
var result string
result, err = c.client.Get(c.memberKey(mid)).Result()
if err == redis.Nil {
return ext, false, nil
}
if err != nil {
return ext, false, err
}
_ = json.Unmarshal([]byte(result), &ext)
return ext, true, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment