在单元测试中访问Lua中的局部函数。

有没有办法用luaunit测试本地函数。 以下是示例代码:

-- 文件 f.lua
local function f (n)
    return n*2
end

-- 文件 unit-test.lua
require('luaunit')
require('f')

TestF = {} --类
    function TestF:testF()
        assertEquals( f(5), 10)
    end
-- 类 TestF

LuaUnit:run()

当我运行时

lua unit-test.lua

我得到了:

失败的测试:
-------------
1) TestF.testF
unit-test.lua:13: attempt to call global 'f' (a nil value)
stack traceback:
        [C]: in function 'xpcall'

Ran 1 tests in 0.000 seconds
FAILED (failures=1)

如果这不可能,最佳解决方案是什么?我该将本地函数更改为全局吗?

点赞
用户3253369
用户3253369

似乎,将局部函数包装起来可以解决问题:

-- 文件 f.lua
local function f (n)
    return n*2
end

function wrapped_f (n)
  return f (n)
end

-- 文件 unit-test.lua
require('luaunit')
require('f')

TestF = {} --class
    function TestF:testF()
        assertEquals( wrapped_f(5), 10)
    end
-- class TestF

LuaUnit:run()

运行单元测试后:

.
Ran 1 tests in 0.000 seconds
OK
2015-11-16 18:37:05
用户6833568
用户6833568

我建议您修改 f.lua 以保留模块形式。 这样就不会污染全局环境了。

要了解介绍,请单击下面的链接:

http://lua-users.org/wiki/ModulesTutorial

local mymodule = {}

function mymodule.foo()
    print("Hello World!")
end

return mymodule
2016-09-15 04:00:33