単一のモジュール関数に対して単体テストを作成しようとしています。このモジュールは他のいくつかのモジュールと連携するため、これらのモジュールをモックアウトして、テスト対象のシステムを分離したいと思います。簡略化した擬似コードを次に示します。
local moduleFoo={}
local moduleBaz= require("moduleBaz")
moduleFoo.doSomething = function (arg)
if moduleBaz.bar.neatMethod(arg) then
--does something interesting
end
end
return moduleFoo
そして、これがmoduleBazのコードです
local moduleBaz={}
moduleBaz.bar= {}
moduleBaz.bar.neatMethod=function(arg)
--does something neat
end
return moduleBaz
package.preload関数を使用して、テストを実行する前にmoduleBazのモックインスタンスを挿入しようとしていますが、機能していないようです(つまり、moduleBazの実際のインスタンスがテストで使用されており、モックではありません)
これがいくつかの疑似テストコードです:
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を初めて使用しますが、言語でスコープがどのように処理されるかについてはまったく満足していません。