我正在尝试针对单个模块函数编写单元测试。该模块与其他几个模块协作,所以我想模拟这些模块来隔离我的系统。下面是一些简单的伪代码:使用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永远不会被调用。 –