我正在嘗試針對單個模塊函數編寫單元測試。該模塊與其他幾個模塊協作,所以我想模擬這些模塊來隔離我的系統。下面是一些簡單的僞代碼:使用package.preload嘲笑lua模塊
local moduleFoo={}
local moduleBaz= require("moduleBaz")
moduleFoo.doSomething = function (arg)
if moduleBaz.bar.neatMethod(arg) then
--does something interesting
end
end
return moduleFoo
這裏是爲moduleBaz
我試圖使用package.preload功能我的測試運行之前注入moduleBaz的模擬實例的代碼local moduleBaz={}
moduleBaz.bar= {}
moduleBaz.bar.neatMethod=function(arg)
--does something neat
end
return moduleBaz
,但它似乎並沒有工作(即moduleBaz的真實實例測試,不是我的模擬使用)
下面是一些psueudo測試代碼:
package.loaded.moduleBaz= nil
local moduleBaz = {}
moduleBaz.bar = {}
moduleBaz.bar.neatMethod= function(guid) return true end
package.preload['moduleBaz'] = function()
return moduleBaz
end
local foo= require("moduleFoo")
foo.doSomething('asdasdasda')--real moduleBaz is called, not my mock!
任何想法我做錯了什麼?我對Lua非常陌生,對於如何在語言中處理範圍感到不太舒服!
你是否也在'package.loaded.moduleFoo = nil'確定你沒有使用舊版本的moduleFoo? –
我確實嘗試過。它似乎沒有效果,因爲package.preload永遠不會被調用。 –