0

redisluaモックプロジェクトを実行してredisluaコードをテストしようとしています。しかし、明らかに、redis-mockプロジェクトにはバグがあります。

テストコードを呼び出すredis.call('hget', 'foo', 'bar')と、redisモックはhash.lua#22でアサートエラーをスローします。これはRedisLua.lua#20からの呼び出しです。

-- RedisLua.lua
local call = function(self)
  return (function(cmd, ...)
    cmd = string.lower(cmd)

    local arg = {...}

    local ret = self.db[cmd](self.db, unpack(arg)) -- line 20

    if self.RedisLua_VERBOSE then
      print(cmd .. "( " .. table.concat(arg, " ") .. " ) === ".. tostring(ret))
    end

    return ret
  end)
end


-- hash.lua
function RedisDb:hget(self,k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb.xgetr(self,k,"hash")
    return x[k2]
end

トレースした後、私は、selfis 'foo'kis 'bar'、およびk2isが実際nilにあることを発見しました。このバグを修正するにはどうすればよいですか、kすべきfooであり、k2すべきである'bar'

4

2 に答える 2

1

ではなく、redis:call('hget', 'foo', 'bar')または同等に呼び出す必要があると思います。redis.call(redis,'hget','foo','bar')redis.call('hget', 'foo', 'bar')

于 2013-03-13T07:27:28.867 に答える
0

私自身の質問に答えてください。

と定義する場合は必要あり:ませんself

-- hash.lua
function RedisDb:hget(self,k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb.xgetr(self,k,"hash")
    return x[k2]
end

への変更

-- hash.lua
function RedisDb:hget(k,k2)
    assert((type(k2) == "string")) -- # line 22
    local x = RedisDb:xgetr(k,"hash")
    return x[k2]
end
于 2013-03-13T09:12:05.043 に答える