package express_tool import ( "context" "encoding/json" "errors" "fmt" "github.com/redis/go-redis/v9" "log" "testing" "time" ) func TestAliCloudExpressClient_GetLogisticsInfo(t *testing.T) { type fields struct { AppCode string Host string } type args struct { mobile string number string } tests := []struct { name string fields fields args args wantRes *ExpressRes wantErr bool }{ { name: "test1", fields: fields{ AppCode: "", Host: "", }, args: args{ mobile: "", number: "", }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { a := &AliCloudExpressClient{ AppCode: tt.fields.AppCode, Host: tt.fields.Host, } gotRes, err := a.GetLogisticsInfo(tt.args.mobile, tt.args.number) log.Println(gotRes, err) }) } } func TestAliCloudExpressClient_GetLogisticsInfoFormCache(t *testing.T) { rdb := redis.NewClient(&redis.Options{ Addr: "", Password: "", DB: 1, }) // 创建缓存实例 cache := NewRedisCache(rdb) a := &AliCloudExpressClient{ AppCode: "", Host: "", cache: cache, } gotRes, err := a.GetLogisticsInfoFormCache(context.Background(), "", "", "", time.Minute) log.Println(gotRes, err) } func TestAliCloudExpressClient_DeleteLogisticsInfoCache(t *testing.T) { rdb := redis.NewClient(&redis.Options{ Addr: "", Password: "", DB: 1, }) // 创建缓存实例 cache := NewRedisCache(rdb) a := &AliCloudExpressClient{ AppCode: "", Host: "", cache: cache, } err := a.DeleteLogisticsInfoCache(context.Background(), "", "") log.Println(err) } type RedisCache struct { client *redis.Client } func (r *RedisCache) Del(ctx context.Context, number string) error { return r.client.Del(ctx, number).Err() } func NewRedisCache(client *redis.Client) *RedisCache { return &RedisCache{client: client} } func (r *RedisCache) Set(ctx context.Context, number string, res string, ttl time.Duration) error { if number == "" { return errors.New("number不能为空") } return r.client.Set(ctx, number, res, ttl).Err() } // Get 从Redis获取IP信息 func (r *RedisCache) Get(ctx context.Context, number string) (*ExpressRes, error) { if number == "" { return nil, errors.New("number不能为空") } data, err := r.client.Get(ctx, number).Bytes() if err != nil { if errors.Is(err, redis.Nil) { return nil, nil // 键不存在,返回nil而不是错误 } return nil, fmt.Errorf("无法获取物流信息: %w", err) } var info ExpressRes if err = json.Unmarshal(data, &info); err != nil { return nil, fmt.Errorf("无法解析物流信息: %w", err) } return &info, nil }